我有一个应用程序写在MS Visual C++ 2005上。它在客户端计算机上失败。我无法重现失败;我所有用于分析的内容都是由应用程序创建的日志。在本申请中,我有以下片段:两个析构函数之一在栈展开期间未调用
class EntranceLoggerForFunc
{
public:
EntranceLoggerForFunc()
{
WriteToLog("EntranceLoggerForFunc");
}
~EntranceLoggerForFunc()
{
WriteToLog("~EntranceLoggerForFunc");
}
}
void Func()
{
EntranceLoggerForFunc logger;
....
if (<some comdition>)
Func();
....
}
void Func2()
{
try
{
Func();
}
catch(...)
{
WriteToLog("Exception happened");
}
}
应用程序被编译与键/ EHA(启用C++与SEH异常异常
在日志我看到以下:
EntranceLoggerForFunc EntranceLoggerForFunc 〜EntranceLoggerForFunc 异常发生
换句话说,一个异常的某处发生的函数功能()的内部;一d已被Func2()捕获。但是为什么堆栈展开期间只调用了两个对象EntranceLoggerForFunc的析构函数?
现在我只有以下版本:堆栈被损坏了(很可能是由于导致异常的错误操作),这就是为什么其中一个析构函数无法工作。
任何其他版本?
你能发布一个可复制的例子来重现问题吗? – 2010-11-25 18:05:32
顺便说一句 - 请注意始终接受你问的问题你最喜欢的答案。这就是StackOverflow的工作原理。您可以通过勾选左侧的绿色勾号将答案标记为“已接受”。 – Kos 2010-11-25 18:36:11