У меня проблема, когда во время обращения к сторонней библиотечной программе мой процесс завершается. Я полностью не могу уловить это в своем отладчике. Это может быть связано с этим вопросом: Как я могу отладить процесс win32, который неожиданно завершает молчание?.
Когда я перехожу через вызов в эту библиотеку, процесс отладки просто завершается. Если это прекращение было связано с необработанным исключением или нарушением доступа к памяти, отладчик поймал бы его. Поэтому я думаю, что процесс каким-то образом заканчивается нормально.
Что я пробовал:
- Установка точек останова на
ExitThread
иExitProcess
- Установка обработчиков для необработанных исключений и недопустимых параметров (
set_terminate
и_set_invalid_parameter_handler
) - Изменение
_set_abort_behavior
и_set_error_mode
. - Поручить отладчику прекратить выполнение всех исключенных исключений.
Но безрезультатно ни один из обработчиков не вызван, и ни одна точка останова не запускается.
То, что я наблюдал: Когда процесс выходит из строя, я вижу две вещи в окне вывода отладки:
-
Не связано (см. обновление ниже)
Я вижуEEFileLoadException
. Быстрый google этого исключения не дает мне ясного ответа на whar это исключение означает.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). Этот код ошибки, насколько я могу судить, означает, что одна из функций времени выполнения c получила недопустимый параметр, и приложение прекращено по соображениям безопасности.
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
не работает в отладчике, так что не может быть и речи. И, как отмечено в моем комментарии, обработчики управляются по потоку, поэтому у меня нет доступа к соответствующему обработчику.
Кроме того, программа, скорее всего, сбой в рабочем потоке, к которому у меня нет доступа, поэтому сложно установить любые точки останова/обработчики.
Есть ли лучший способ выяснить, что не так?