Как найти номера строк, соответствующие смещениям в трассировке стека, используя windbg? - PullRequest
4 голосов
/ 01 августа 2011

У меня аварийный дамп неуправляемого кода C ++.

Я открыл его с помощью Windbg, установил путь к символу и исходный путь.Запустил! Проанализировать -v и получил следующую трассировку стека

STACK_TEXT:  
094efec0 7439fdc8 8b6ac787 00000000 00000000 WINSPAMCATCHER!_invalid_parameter_noinfo+0xc [f:\dd\vctools\crt_bld\self_x86\crt\src\invarg.c @ 125]
094eff3c 743a005e 085c37d8 74547d66 085c37d8 WINSPAMCATCHER!SpamCatcher::SCEngine::ruleUpdateLoop+0x338
094eff44 74547d66 085c37d8 8b6ac637 00000000 WINSPAMCATCHER!SpamCatcher::SCEngine::ruleUpdateLoopWrapperWin+0xe
094eff7c 74547e0e 00000000 094eff94 771df13c WINSPAMCATCHER!_callthreadstartex+0x1b [f:\dd\vctools\crt_bld\self_x86\crt\src\threadex.c @ 348]
094eff88 771df13c 091707c8 094effd4 7769d80d WINSPAMCATCHER!_threadstartex+0x82 [f:\dd\vctools\crt_bld\self_x86\crt\src\threadex.c @ 326]
WARNING: Stack unwind information not available. Following frames may be wrong.
094eff94 7769d80d 091707c8 7e3e52db 00000000 kernel32+0x8f13c
094effd4 7769da1f 74547d8c 091707c8 00000000 ntdll+0x7d80d
094effec 00000000 74547d8c 091707c8 00000000 ntdll+0x7da1f

Из приведенной выше трассировки стека я не вижу номер строки SCEngine :: ruleUpdateLoop + 0x338.Вместо этого я вижу смещение 0x338.Я думаю, это какое-то смещение сборки.Можно ли найти номер строки, соответствующий этому смещению, с помощью windbg?

Ответы [ 4 ]

2 голосов
/ 02 августа 2011

Обычно это происходит, когда символы вашего модуля не могут быть найдены.Используйте команду lm для просмотра списка всех модулей.

lm

Найдите SpamCatcher и посмотрите, нашел ли он ваши личные символы (хорошо) или использует экспортные символы (плохо).

Расширение itoldyouso также должно сообщать вам, если ваши PDB соответствуют или нет.

!itoldyouso SpamCatcher

Если вам необходимо дополнительно устранить проблему с символами, попробуйте включить детальную загрузку символов, а затем перезагрузите символы:

!symnoisy
.reload /f
1 голос
/ 02 августа 2011

Символы для вашей программы (или это DLL?) Были загружены правильно, как видно из номеров строк для функций CRT.Убедитесь, что вы указали / Zi для компилятора.

Вы также можете попытаться выяснить номер строки, взглянув на разборку u WINSPAMCATCHER!SpamCatcher::SCEngine::ruleUpdateLoop WINSPAMCATCHER!SpamCatcher::SCEngine::ruleUpdateLoop+0x338 и декомпиляцию в своей голове.Это не так сложно, как вы думаете.Я рекомендую эту бумагу для начала.

0 голосов
/ 14 июня 2016

Откройте окно Call Stack (доступно на панели инструментов главного окна), затем на панели инструментов окна Call Stack нажмите кнопку «Источник», чтобы активировать его. Далее в главном окне введите

.excr

Затем в окне стека вызовов записи будут иметь путь к файлу и номер строки.

Наконец, если у вас загружены исходные файлы, вы можете просто дважды щелкнуть запись, и она откроет окно с выделенной строкой. :)

0 голосов
/ 01 августа 2011

с помощью «.lines» включает или выключает номера строк

  • Включить

    .lines -e
    
  • Disable

    .lines -d
    
  • Переключение

    .lines -t
    
...