타사 라이브러리 루틴 호출 중에 프로세스가 종료되는 문제가 있습니다. 내 디버거에서 이것을 잡을 수 없다. 이 질문과 관련된 것일 수 있습니다 : How can I debug a win32 process that unexpectedly terminates silently?.프로세스가 종료되는 이유를 결정하는 방법은 무엇입니까?
이 라이브러리를 호출 할 때 디버깅되는 프로세스가 종료됩니다. 이 종료가 처리되지 않은 예외 또는 메모리 액세스 위반으로 인한 것이면 디버거가이를 잡았을 것입니다. 그래서 가장 좋은 추측은 프로세스가 어떻게 든 정상적으로 종료된다는 것입니다.
은 내가 시도하는 것 : _set_abort_behavior
및 _set_error_mode
변경되지 않은 예외 무효 paramters (set_terminate
및 _set_invalid_parameter_handler
)
- 설정
ExitThread
에 중단 점 및ExitProcess
- 합니다.
- 모든 예외에서 실행을 중단하도록 디버거에 지시합니다.
그러나 아무 소용이 없으면 아무 핸들러도 호출되지 않고 중단 점이 트리거되지 않습니다. 내가 관찰 한 내용을
: 프로세스 충돌, 나는 디버그 출력 창에 두 가지를 볼 때 이 : 관련되지
(아래 업데이트 참조)
내가 볼EEFileLoadException
가 발생된다. 이 예외에 대한 빠른 google은이 예외를 의미하는 명확한 대답을 제공하지 않습니다. 종료되면First-chance exception at 0x7656b9bc (KernelBase.dll) in Program.exe: Microsoft C++ exception: EEFileLoadException at memory location 0x0030b5ac.. First-chance exception at 0x7656b9bc (KernelBase.dll) in Program.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000.. First-chance exception at 0x7656b9bc (KernelBase.dll) in Program.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000.. First-chance exception at 0x7656b9bc (KernelBase.dll) in Program.exe: 0xE0434352: 0xe0434352.
-
는 모든 스레드가 동일한 에러 코드 (STATUS_INVALID_CRUNTIME_PARAMETER)를 반환한다. 이 오류 코드는, 알 수있는 한, 런타임 기능 중 하나가 유효하지 않은 매개 변수를 수신했으며 응용 프로그램이 보안 상 이유로 종료되었음을 의미합니다.
The thread 'Win32 Thread' (0x12c0) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0xe04) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x53c) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x116c) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x16e0) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x1420) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x13c4) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x40c) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0xc78) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0xd88) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x16c8) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0xcb8) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x584) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x1164) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x1550) has exited with code -1073740777 (0xc0000417). The thread 'Win32 Thread' (0x474) has exited with code -1073740777 (0xc0000417). The program '[5140] Program.exe: Native' has exited with code -1073740777 (0xc0000417).
는 내가 정말 알고 싶은 것은이 발생하고 선택적 것입니다; 디버거에서 이것을 어떻게 잡을 수 있습니까?
업데이트 EEFileLoadException
에 관해서는, 그것은이 프로세스의 종료와 관련되지 않도록,이 종료의 원인이되는 호출을 프로그램하기 전에 발생 사실이다.
업데이트 난 그냥 그 질문에서 그래서 set_terminate
디버거에서 작동하지 않습니다 읽어 보시기 바랍니다. 그리고 내 의견에 언급 한 바와 같이 핸들러는 스레드별로 관리되므로 관련 처리기에 액세스 할 수 없습니다.
또한 프로그램에 액세스 할 수없는 작업자 스레드에서 충돌이 발생할 가능성이 높으므로 중단 점/처리기를 전혀 설정하기가 어렵습니다.
잘못된 점을 파악하는 더 좋은 방법이 있습니까?
나는 그들이 스레드 단위로 설치하고 난 충돌 스레드에 액세스 할 수 없습니다 때문에 종료 핸들러가 호출되지 않습니다 것을 깨달았다. –
내 경우를 제외하고 TRACE 메시지가 출력 창으로 전달되지 않는 것과 비슷한 상황이 발생합니다. 대신 WinDebug로 연결했을 때, VS가 무시하고있는 DebugBreak() 호출이 있다는 것을 알았습니다. 프로세스가'terminate()'를 일으켜'프로그램 [0x2F74] 'OUTLOOK.EXE'가 종료되었습니다 코드 -1073740777 (0xc0000417)으로 .' 불행히도 Visual Studio에서 디버깅 할 프로그램을 무시하는 이유를 알 수 없습니다. –