2012-04-22 3 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();으로 전화하십시오. 난 비주얼 스튜디오 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++ 예외 : 메모리 위치 0x1822bda0에서 stlsoft :: winstl_project :: windows_exception ..

20120423-104817.497 : 로그 파일에 메시지를 쓰지 못했습니다. 주어진 메시지는 다음과 같습니다. [myapp.Qt.Framework.13424, 23/04/2012 10 : 48 : 17.496 a.m .; 디버그] : "일부 로깅"

그런

pantheios::log(pantheios::debug, "some logging");를 호출, 내 모든 로깅 프로젝트와 같은 폴더에 "구제 금융"파일에 기록됩니다. 이것은 이전에는 효과가 있었지만 "To-do-list"에 큰 영향을주었습니다 (그러나 다른 것들보다 조금 더 아래에 있음).

이제 제 질문은 어떻게 수정합니까? 내가 찾을 수 있지만 성공하지 못한 모든 튜토리얼을 따라 갔다. 그리고 왜 Ms Application Verifier를 실행 한 후 내 앱이 이것을 더 이상 받아들이지 않기로 결정 했습니까? 말도 안돼.

답변

2

First chance exceptions은 예외가 발생했다는 것을 의미합니다. 프로그램에 버그가 있다는 것을 의미하는 것은 아니며 디버거가 예외가 발생했다는 것을 보여주기 때문에 콜 체인 위로 전파되기 전에 검사 할 기회가 있습니다. 예외 처리기 (예 : 로깅)에서 예외를 발견 한 경우 응용 프로그램이 계속 실행됩니다. 그렇지 않으면 디버거에서 처리되지 않은 예외로 인해 응용 프로그램이 종료되었음을 알리는 두 번째 예외 예외 통지를 제공합니다.

첫 번째 예외 알림을 받고 싶지 않다면 디버거에서 해제 할 수 있습니다. This link은 Application Verifier에서 예외 처리를 해제하는 방법을 도울 수 있습니다.

이 문제를 해결하려면 Application Verifier에서 예외 테스트를 해제하십시오. 이렇게하려면 다음과 같이하십시오.

1.Start Application Verifier.

2. 응용 프로그램에서 테스트 할 GDI + 프로그램을 누릅니다.

3. 테스트를 수행하고 기본 사항을 확장하십시오.

4. 예외 확인란의 선택을 취소하십시오.

5. 테스트 할 GDI + 프로그램을 실행하십시오.

액세스 위반이 발생하면 디버깅 도구에서 중단 점이 발생하지 않도록 디버깅 도구를 구성 할 수도 있습니다.

대안 (MSVS에서 예외 알림을 해제)을 통해입니다 "Debug-> 예외 ..."

또는 가능한 경우, 예외가 처음부터 발생되지 않는지 확인 . 예외의 성격 (예 : 파일을 찾을 수 없음)을 검토하고 의도 한 작업을 방해하는 조건을 수정해야합니다.

Application Verifier의 성격/목적을 생각하면 후자의 접근 방식을 제안합니다. AV는 이전에 ok 일 수 있었지만 나중에 문제가 발생할 수있는 잘못된 내용이 있음을 알려주고 있습니다 (환경, 환경, 등)

+0

그래, 나는 그것을 이제는 더 이상 추락하지 않았다. 그러나 읽을 수 없기 때문에 나는 로깅에서 그 메시지를 가질 수 없다. 나는 아직도 그것을 버려지는 방법을 이해할 수 없다. – chikuba

+0

첫 번째 예외 메시지는 어떻게 커스텀 로그에 기록 될까? 모든 예외를 잡아서 기록하는 경우 어떤 예외가 발생했는지 파악하고 무시할 수 있습니다. 이상적인 해결책은 처음에'CreateFileA'를 호출 할 때 예외를 발생시키는 조건을 수정하는 것입니다. – Attila

+0

은 예외를 기록하지 않지만 "20120327-112911.994 : 로그 파일에 메시지를 쓰지 못했습니다. 주어진 메시지는 다음과 같습니다." 메시지의 시작. – chikuba