【问题标题】:From Memory Address to Source Line of Code从内存地址到源代码行
【发布时间】:2011-04-01 11:05:47
【问题描述】:

我正在使用 WinDBG 并且有以下堆栈跟踪:

ntdll!NtTerminateProcess+0xa
KERNELBASE!TerminateProcess+0x2f
MSVCR90!_invoke_watson+0x11c [f:\dd\vctools\crt_bld\self_64_amd64\crt\src\invarg.c @ 234]
MSVCR90!_invalid_parameter+0x70 [f:\dd\vctools\crt_bld\self_64_amd64\crt\src\invarg.c @ 115]
MSVCR90!fgetpos+0x33 [f:\dd\vctools\crt_bld\self_64_amd64\crt\src\fgetpos.c @ 45]
CleanPayload!DoSomething+0x22 [c:\users\brent.arias\documents\visual studio 2008\projects\samplecpplibrary\cleanpayload\cleanpayload.cpp @ 68]
CleanPayload!main+0x1c [c:\users\brent.arias\documents\visual studio 2008\projects\samplecpplibrary\cleanpayload\cleanpayload.cpp @ 115]
CleanPayload!__tmainCRTStartup+0x11a [f:\dd\vctools\crt_bld\self_64_amd64\crt\src\crtexe.c @ 586]
kernel32!BaseThreadInitThunk+0xd
ntdll!RtlUserThreadStart+0x1d

很明显,调试器知道每个堆栈帧指向哪一行代码,因为它会在“@”之后显示该数字。我很高兴我可以在源窗格上按 crtl-l 并输入行号,但为什么它不能为我这样做呢?有没有办法点击调试窗口并说“跳转到源代码中的这一点”而无需我自己输入?

【问题讨论】:

    标签: c++ debugging windbg


    【解决方案1】:

    它可以做到这一点,只是不能从任何窗口。它在调用堆栈窗口 (Alt+6) 中工作——双击已映射到代码行的框架,它会将您带到源文件中的行。如果文件当前未在 WinDbg 中打开,它会打开该文件。

    【讨论】:

    • 请注意,这仅在您具有库的正确符号并且存在预期代码并且 WinDBG 可以找到两者时才有效。它有时会(取决于我认为的设置)自动弹出源文件和/或反汇编。
    • 好点。您需要加载符号和可访问的源文件才能使其工作。 Call Stack 窗口有标题按钮,作为在调用堆栈中显示的附加信息,Source 按钮使您更容易理解是否加载了符号。
    猜你喜欢
    • 2018-10-18
    • 2012-03-25
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    相关资源
    最近更新 更多