从内存地址获取到源代码中的函数

Getting from memory address to function in source

使用 Process Explorer 工具,我知道我的进程在一个特殊函数处挂起 myexe.exe+0x1b5773

如果我有可用的 pdb,是否有办法获得准确的功能? 或者必须有此信息的 .map 文件?

我知道我可以使用调试器附加到 exe,但如果问题发生在非开发人员机器上,这现在总是一个选项..

进程浏览器

这可以在 Options|Configure symbols... 下的 Process Explorer 中完成:

  1. 选择dbghelp.dll
  2. 设置符号路径

    SRV*c:\debug\symbols*http://msdl.microsoft.com/download/symbols;c:\mysymbols
    

但这对您的客户来说可能不是很方便。

一种更安全且通常对用户更友好的方式:

  1. 右键单击进程
  2. 选择Create dump | Create Minidump...
  3. Select一个文件名
  4. 让客户将转储发送给您,以便您对其进行分析。

有了转储,您就不会做错任何事情,甚至数周后,它仍然可以被分析,如果 Process Explorer 仅显示片刻的瞬态数据,则您不能这样做。

WinDbg

您可以在 WinDbg 中这样做:

  1. 打开有问题的可执行文件,但作为转储文件
  2. .symfix
  3. .sympath+ <your PDB path>
  4. .reload
  5. ln myexe.exe+0x1b5773