C++ 从内存地址到源代码行

C++ 从内存地址到源代码行,c++,debugging,windbg,C++,Debugging,Windbg,我正在使用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\sr

我正在使用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并输入行号,但为什么它不能为我这样做呢?是否有一种方法可以单击调试窗口并说“跳转到源代码中的此点”,而无需我自己键入?

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

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

请注意,这仅在您具有库的正确符号且预期代码存在且WinDBG可以同时找到这两个符号时才有效。它有时会(取决于我认为的设置)自动弹出源文件和/或反汇编。您需要加载符号并可访问源文件才能使其工作。“调用堆栈”窗口具有标题按钮,这些按钮作为要在调用堆栈中显示的附加信息。如果加载了符号,则“源”按钮会使您更容易理解。请注意,只有当您具有库的正确符号且预期代码存在且WinDBG可以同时找到这两个符号时,此操作才有效。它有时会(取决于我认为的设置)自动弹出源文件和/或反汇编。您需要加载符号并可访问源文件才能使其工作。“调用堆栈”窗口具有标题按钮,作为要在调用堆栈中显示的附加信息。如果加载了符号,则“源”按钮会使您更容易理解。