#c #stack #call #win64
#c #стек #вызов #win64
Вопрос:
У нас есть 32-битное приложение «C» — Win32, которое иногда зависает
Во время зависания (состояние отсутствия ответа) клиент отправил нам дамп, когда я открыл дамп в Windbg, стек вызовов выдает следующее
wow64win!NtUserMessageCall 0xa
wow64win!whNT32NtUserMessageCallCB 0x32
wow64win!Wow64DoMessageThunk 0x8b
wow64win!whNtUserMessageCall 0x12e
wow64!Wow64SystemServiceEx 0xd7
wow64cpu!TurboDispatchJumpAddressEnd 0x2d
wow64!RunCpuSimulation 0xa
wow64!Wow64LdrpInitialize 0x42a
ntdll!LdrpInitializeProcess 0x17e3
ntdll! ?? ::FNODOBFM::`string' 0x28ff0
ntdll!LdrInitializeThunk 0xe
Я не получаю подсказки, поскольку стек вызовов не указывает на наш код.
PS: — Ситуация зависания характерна не только для 64-битных систем.
Комментарии:
1. Похоже, что поток отправил сообщение. Возможно, процесс, которому принадлежит окно получателя, не смог ответить.
2. Единственная другая подсказка заключается в том, что наше приложение устанавливает соединение DDE с MS Word, и на скриншоте диспетчера задач оба они не реагируют
3. Отсутствие активности говорит вам о том, что здесь недостаточно информации, чтобы помочь вам. Вы захотите выполнить некоторую отладку. Соберите информацию.
Ответ №1:
вам нужно переключиться на 32 бита в windbg, !wow64exts.sw
, это распечатает реальную трассировку стека для цели wow64.
Комментарии:
1. Большое вам спасибо. Это сделало свое дело 🙂 Теперь я могу получить точную трассировку стека.