2012-04-22 35 views
0

我的應用程序運行正常,直到我嘗試使用Application Verifier進行調試。從那以後,我開始變得「​​第一次機會異常...:無效的句柄指定」等問題似乎在Pantheios的「bailout.c」文件:Pantheios的第一次機會例外

hFile = CreateFileA("logging-bailout.txt" 
       , GENERIC_WRITE 
       , 0 
       , NULL 
       , OPEN_ALWAYS 
       , 0 
       , NULL); <--- this is where it crashes, line 442 

和消息:

First-chance exception at 0x7769f8cd in myapp.exe: 0xC0000008: An invalid handle was specified. 


======================================= 
VERIFIER STOP 0000000000000300: pid 0x3814: Invalid handle exception for current stack trace. 

    00000000C0000008 : Exception code. 
    00000000111DE950 : Exception record. Use .exr to display it. 
    00000000111DE460 : Context record. Use .cxr to display it. 
    0000000000000000 : Not used. 


======================================= 
This verifier stop is continuable. 
After debugging it use `go' to continue. 

======================================= 

在控制檯剛記錄下我用Pantheios得到的異常之前,我並沒有太在意太多。然而,現在,當應用程序崩潰的第一次登錄使用Pantheios現在是我的時間來處理這個問題,但我不太確定如何。

設置時,我的Pantheios我按照本指南:http://www.codeproject.com/Articles/27119/Using-Callback-Back-ends-with-the-Pantheios-Loggin

在每一個文件我有記錄我在源文件中的以下行:

#include <pantheios/pantheios.hpp> 
#include <pantheios/inserters/boolean.hpp> 
#include <pantheios/inserters/integer.hpp> 
#include <Shared/logs.h> 

logs.h包含:

#include <pantheios/implicit_link/core.h> 
#include <pantheios/implicit_link/fe.simple.h> 
#include <pantheios/implicit_link/be.WindowsConsole.h> 

在做任何記錄之前,我也會打電話給pantheios::init();

我使用Visual Studio 2010和被包括在 「附加依賴」 下面的LIB-文件:

$(PANTHEIOS_ROOT)\lib\pantheios.1.core.vc10.mt.debug.lib 
$(PANTHEIOS_ROOT)\lib\pantheios.1.be.WindowsConsole.vc10.mt.debug.lib 
$(PANTHEIOS_ROOT)\lib\pantheios.1.fe.simple.vc10.mt.debug.lib 
$(PANTHEIOS_ROOT)\lib\pantheios.1.util.vc10.mt.debug.lib 

然而,我所有的日誌是這樣的:

第一次機會myapp.exe中的0x750bb9bc處出現異常:Microsoft C++異常:stlsoft :: winstl_project :: windows_exception在內存位置0x1822bda0 ..

20120423-104817.497:未能將消息寫入日誌文件;給出的信息如下:[myapp.Qt.Framework.13424,2012年4月23日10:48:17.496 a.m .;調試]:致電pantheios::log(pantheios::debug, "some logging");

時,那麼,「一些日誌」

,我的所有日​​志記錄被寫入了「救市」的文件在同一文件夾中的項目。這工作之前,但它是我的「待辦事項列表」上的一個重大的子彈(但比其他事情更深入一點)。

所以現在我的問題是,我該如何解決這個問題?跟着我找到的每一個教程,但沒有成功。爲什麼我的應用程序在運行Ms應用程序驗證程序後決定不再接受此操作?沒有意義。

回答

2

First chance exceptions僅表示拋出了異常。這並不意味着你的程序中存在一個bug,只是調試器向你顯示了一個異常正在拋出,所以你有機會在它傳播到調用鏈之前檢查它。如果異常被異常處理程序捕獲(例如,用於日誌記錄),則應用程序將繼續執行,否則調試程序將爲您提供第二次異常通知,通知您應用程序將由於未處理的異常而退出。

如果您不想接收第一次機會的異常通知,可以在調試器中關閉它。 This link可能有助於瞭解如何關閉Application Verifier中的異常處理。

要解決此問題,請關閉Application Verifier中的異常測試。要這樣做,請按照下列步驟操作:

1.啓動應用程序驗證程序。

2.在應用程序下,單擊要測試的GDI +程序。

3.在測試下展開基礎知識。

4.單擊以清除例外複選框。

5.運行您要測試的GDI +程序。

您還可以配置調試工具以確保在發生訪問衝突時在調試工具中不會遇到斷點。

替代(關閉在MSVS異常通知)是通過「調試 - >例外...」

或者,如果可能的話,確保異常不會在第一時間拋出。您需要檢查異常的性質(例如找不到文件)並修復阻止預期操作的條件。

考慮到應用程序驗證程序的性質/目的,我建議採用後一種方法:AV正在告訴您某些不正確的事情可能以前已經發生,但以後可能會導致問題(取決於環境,等等)

+0

是的,我轉過身,所以現在它不再崩潰了。然而,我不能在我的日誌記錄中顯示這條消息,因爲這使得它很難閱讀。我仍然無法弄清楚如何讓它消失。 – chikuba 2012-04-29 22:23:16

+0

第一次機會的異常消息如何寫入您的自定義日誌中?如果您捕獲所有異常並記錄它們,則可以明確指出哪些異常會被拋出並忽略它。理想的解決方案仍然是修復導致異常的條件,當首先調用'CreateFileA' – Attila 2012-04-30 00:03:44

+0

不記錄異常,但是「20120327-112911.994:未能將消息寫入日誌文件;給出的消息如下:」in消息的開始。 – chikuba 2012-04-30 00:56:32

相關問題