2014-01-13 7 views
0

Я пытаюсь отлаживать дамп сбоя из моего кода VB.NET, который должен запускать 24-7 машину Win7, у которой нет отладчика. Цель всех модулей - 32-разрядная, поэтому я не знаю, почему кажется, что она пытается использовать 64-разрядные вещи.Crashdump показывает 64 бит, когда была выбрана 32-битная цель.

Похоже, что он пытается подключиться к отладчику и не работает, поэтому он прерывается. я войти в машину и обнаружили, что он снова упал, так что я сделать файл 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().

+0

Как создать аварийный дамп, если на этом компьютере нет отладчика? И что должно случиться, что callstack содержит строку 'ntdll.dll! 'Включение параметров отладки кучи \ n"() '? Я никогда раньше этого не видел, но, возможно, для этого процесса есть некоторые опции Gflags. –

ответ

0

В 64-разрядной системе «32-битные окна» работают на уровне эмуляции, называемом wow64 (который вы видите), который переводит вызовы с 32 бит на 64 бита. Так что это нормально.

Я не совсем понял из вашего вопроса: авария неожиданная/как-то вызвана отладчиком?

+0

Это технически неправильно. 32-битный код ** не ** эмулируется на 64-битной Windows, а вызовы не переводятся. Существуют 32-разрядные и 64-разрядные версии различных OS-предоставленных библиотек пользовательского режима, а соответствующие загружаются в зависимости от того, является ли процесс 32-разрядным или 64-разрядным. –

+2

@AndrewMedico Перевод выполняется на уровне между DLL пользовательского режима и системными вызовами, которые их поддерживают. Так что да, вы получаете много DLL в правильной настройке битов, но поскольку система/ядро ​​имеет только 64 бита, происходит перевод. Возможно, «эмулировано» слишком сильное слово? Но в некотором смысле это, конечно же, с перенаправлением пути и т. Д., Также продолжается. Таким образом, в wow64 происходит больше, чем просто перевод системных вызовов, следовательно, «эмулируется». – MicroVirus

0

Это совершенно нормально. «WOW64» - это имя 32-разрядной 64-разрядной системы совместимости в Windows и задействовано при запуске 32-разрядного кода в 64-разрядной системе Windows.

+0

Я скомпилировал исполняемый файл в виде сборки Debug x86, поэтому я могу прикрепить отладчик по своему желанию и просмотреть вывод вызова Debug.Writeline(). – SMerrill8

+0

@ SMerrill8: да, когда вы подключаете 32-разрядный отладчик. –

 Смежные вопросы

  • Нет связанных вопросов^_^