windbg - 如何使用windbg在堆栈跟踪中查找与偏移量相对应的行号?

标签 windbg stack-trace offset

我有一个非托管C++代码的故障转储。

我用Windbg打开它,设置符号路径和源路径。
跑!analyze -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查找与此偏移量对应的行号?

最佳答案

从CRT函数的行号可以明显看出,已正确加载了程序的符号(或者它是DLL?)。验证是否已将/Zi指定给编译器。

您也可以通过查看反汇编u WINSPAMCATCHER!SpamCatcher::SCEngine::ruleUpdateLoop WINSPAMCATCHER!SpamCatcher::SCEngine::ruleUpdateLoop+0x338并在脑海中反编译来找出行号。这并不像您想的那样困难。我建议先使用this纸。

关于windbg - 如何使用windbg在堆栈跟踪中查找与偏移量相对应的行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6896830/

相关文章:

c - 在C中,如何找到数组中元素的偏移量

debugging - 创建内存.dmp 文件后是否可以调整大小?

windbg - 如何在 WinDbg 中删除断点 ntdll!DbgBreakPoint+0x1

windbg - pykd 中的 searchMemory 函数

c# - 获取 C# 应用程序在非开发机器上崩溃的堆栈跟踪

c++ - 在 catch block 中抛出异常时打印回溯

java - Try block 在 printStackTrace 方法正在打印时开始打印

java - Elasticsearch 5 - 奇怪的错误(值源配置无效;必须具有字段上下文或脚本或标记为未包装)

c# - 处理奇数场偏移

jquery - 如何确定对象到浏览器窗口右边框的距离