Стек вызовов не дает подсказки

#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. Большое вам спасибо. Это сделало свое дело 🙂 Теперь я могу получить точную трассировку стека.