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.

Другие вопросы по тегам