2012-03-01 7 views
1

내 C++ 프로그램이 프로그램에서 처리되지 않은 예외를 throw하므로 디버그 모드에서 VS가 처리하므로 처리되지 않은 예외가 발생했다는 사실에 대한 창이 표시됩니다. 하지만이 예외는 볼 수 있습니까? 그것은 처리되지 않았습니까? 그 타입은 무엇입니까, 던지기 대상 안에 무엇이 있습니까?VS2010에서 디버그 모드로 잡힌 처리되지 않은 예외를 분석하는 방법은 무엇입니까?

답변

3

휴식 및 스테핑을 시도해 볼 수 있습니다. 코드별로 분석해야 할 것이 있으면 VS가 예외 클래스의 처리기 또는 생성자로 들어갑니다. 이것이 내가 어쨌든 VS2010에서 해왔 던 방법입니다.

그 시점에서 예외 객체의 주소를 알아야하는 경우 조사 식 창에 붙여 넣을 수 있어야하며 예외가 기본 예외 클래스에 캐스트 될 수 있어야합니다 (예외가 시스템 예외가 아니며 좋은 계층 구조를 가짐).

P. 처리되지 않은 예외 루틴을 사용하여 내부에 중단 점을 설정할 수 있습니다.

// global scope 
    LONG WINAPI my_unh_exc_hndlr(_EXCEPTION_POINTERS* excPtrs) 
    { 
     return EXCEPTION_CONTINUE_SEARCH; // Put a breakpoint here in IDE. 
    } 

// ... somewhere in the beginning of main() 
    SetUnhandledExceptionFilter(my_unh_exc_hndlr); 

당신이 처리되지 않은 예외를 명중 할 때마다 실행해야합니다 것처럼 간단 할 수 있습니다.

임의로 충돌하는 다른 프로그램이 있습니까? 소스를 사용할 수 없습니까? 문제 없어. 적은 수의 권한을 가지고 있고 디버그하지 않는 한 거기에 핸들러 루틴을 설정하는 코드 (작은 DLL)를 삽입하십시오.

0

예외가 발생하는 대부분의 경우 Visual Studio는 프로그램을 중단 할 수있는 옵션이있는 대화 상자를 표시하여 코드에서 발생한 위치를 볼 수 있도록합니다. 또한 예외가 발생하기 직전에 객체, 포인터 및 기타 등등의 값을 분석 할 수 있어야합니다. 이것은 힙 손상이나 그와 같은 더러운 것을 다루지 않는 한 잘못 될 것 같은 생각을하기에 충분해야합니다. 예외 그 자체의 세부 사항을 모른 채로 더 많은 것을 말하기는 어렵습니다.

0

예외에 대한 모든 정보를 볼 수없는 경우 Visual Studio에서 디버그 설정을 확인해야 할 수 있습니다. 디버그 메뉴로 이동하여 예외를 클릭하십시오. 거기에서 모든 예외를 해제하도록 선택할 수 있습니다. 예외가 _ 생하면 디버거가 가능한 빨리 중단되어야합니다.

관련 문제