我有一個應用程序寫在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