Crashdump показывает 64-битную, когда была выбрана 32-битная цель.. почему?
Я пытаюсь отладить аварийный дамп из моего кода VB.NET, который должен работать 24-7 на машине с Win7, у которой нет отладчика. Цель для всех модулей - 32-разрядная, поэтому я не знаю, почему кажется, что она пытается выполнить 64-разрядную версию.
Похоже, что он пытается подключиться к отладчику и терпит неудачу, поэтому он прерывается. Я захожу на компьютер и обнаруживаю, что он снова разбился, поэтому я создаю файл crashdump.DMP, который останавливается на следующей трассировке:
wow64.dll!Wow64NotifyDebugger() + 0x1d bytes
wow64.dll!HandleRaiseException() + 0xee bytes
wow64.dll!Wow64NtRaiseException() + 0x88 bytes
wow64.dll!whNtRaiseException() + 0x15 bytes
wow64.dll!Wow64SystemServiceEx() + 0xd7 bytes
wow64cpu.dll!TurboDispatchJumpAddressEnd() + 0x2d bytes
wow64.dll!RunCpuSimulation() + 0xa bytes
wow64.dll!Wow64LdrpInitialize() + 0x429 bytes
ntdll.dll!LdrpInitializeProcess() + 0x1936 bytes
ntdll.dll!string "Enabling heap debug options\n"() - 0x45fe9 bytes
ntdll.dll!LdrInitializeThunk() + 0xe bytes
Один и тот же код вообще не падает, когда отладчик подключен удаленно или локально.
Может кто-нибудь сказать мне, что искать? Я скомпилировал исполняемый файл в виде сборки Debug x86, чтобы по желанию я мог подключить отладчик и просмотреть выходные данные вызова Debug.Writeline().
2 ответа
В 64-битной системе "32-битные окна" работают на уровне эмуляции, называемом wow64 (который вы видите), который переводит вызовы из 32-битных в 64-битные. Так что это нормально.
Я не совсем понял из вашего вопроса, хотя: происходит ли сбой неожиданно / как-то вызвано отладчиком?
Это совершенно нормально. "WOW64" - это имя для 32-битной в 64-битной системе совместимости в Windows, которое используется при запуске 32-битного кода в 64-битной системе Windows.