2011-09-14 2 views
9

Visual Studio 2008에서 디버깅하려고하는이 멀티 스레드 C++ 프로그램이 있습니다.프로그램이 멈추기 바로 전에 Visual Studio를 중단시킬 수 있습니까?

때때로 (보통 1 시간에서 2 시간 사이의 계산 후 임의의 시간이 지나면) 프로그램이 멈추고 디버그 모드를 종료합니다. 디버그 창에서 작성 :

The thread 'Win32 Thread' (0x1560) has exited with code 3 (0x3). 
The thread 'Win32 Thread' (0x5fc) has exited with code 3 (0x3). 
... 

등 모든 스레드가 포함됩니다.

AFAIK 종료 코드 3은 VS가 예외를 가로 채고 중단하여 오류가 무엇인지 그리고 무엇이 원인인지 알아볼 수 있기를 기대합니다.

Visual Studio 디버그 메뉴에서 모든 예외 잡기를 활성화하려고했지만 아무 것도 변경하지 않았습니다.

이 비정상 종료가 발생할 때 휴식을 원한다고 VS에게 알리는 방법이 있습니까?

+0

나는 그 중 하나가 있었고 릴리스 모드에서 알아낼 수 없었습니다. * 디버거가 붙어있는 디버그 모드 *에서 실행될 때, 그것은 평범하고 단순한 널 포인터 역 참조로 밝혀졌지만, 어떻게 든 디버거가 연결되지 않았을 때 예외로보고되었습니다. –

답변

11

내 생각 엔 : 어설 션 오류가 발생하고 CRT가 (어떤 이유로) 메시지 창을 만들 수 없습니다. 이것은 exit (3) 호출로 이어진다. 그 종료 코드를 가진 모든 스레드를 죽일 지 확실하지 않습니다. 아마도 뭔가 잘못되면 모든 스레드가 같은 방식으로 실패 할 것입니다.

프로그램의 시작 부분에 _CrtSetReportMode 호출을 추가하여 어설 션 오류 메시지를 디버거의 출력 창에 표시하십시오. 그런 다음 일련의 스레드 종료 메시지가 표시되기 전에 디버그 출력 창의 어설 션 오류에 대한 세부 정보를 확인해야합니다.

+0

당신이 옳았다는 주장이 다른 스레드에서 맞았습니다. 드디어이 버그를 없앴습니다. 감사합니다 :) – Louen

관련 문제