几天来我们一直在调试一个奇怪的案例,并在一定程度上隔离了这个错误,但它仍然没有任何意义。也许这里的任何人都可以给我一个关于发生了什么的线索。
问题是发生在部分代码中的访问冲突。
基本上我们有这样的东西:
void aclass::somefunc() {
try {
erroneous_member_function(*someptr);
}
catch (AnException) {
}
}
void aclass::erroneous_member_function(const SomeObject& ref) {
// { //<--scope here error goes away
LargeObject obj = Singleton()->Object.someLargeObj; //<-remove this error goes away
//DummyDestruct dummy1//<-- this is not destroyed before the unreachable
throw AnException();
// } //<--end scope here error goes away
UnreachableClass unreachable; //<- remove this, and the error goes away
DummyDestruct dummy2; //<- destructor of this object is called!
}
在调试器中,它实际上看起来像是在破坏 UnreachableClass,并且当我插入 DummyDestruct 对象时,它不会在调用奇怪的析构函数之前被破坏。因此,LargeObject 的破坏似乎并没有出错。
所有这些都在生产代码的中间,很难将其隔离为一个小示例。
我的问题是,有没有人知道是什么原因造成的,发生了什么?我有一个功能齐全的调试器(Embarcadero RAD 工作室),但现在我不确定如何处理它。
谁能给我一些关于如何进行的建议?
更新:
我在 throw 子句下方放置了一个 DummyDestruct 对象,并在析构函数中放置了一个断点。输入了这个对象的析构函数(只有我们在这段代码中)。