【问题标题】:windbg:Getting source code file at give address like "u address"windbg:在给定地址获取源代码文件,例如“u地址”
【发布时间】:2013-08-10 07:43:44
【问题描述】:

我已经用 srcpath 和所有设置了我的 windbg。

我在一个函数上添加了一个断点,我可以看到堆栈跟踪。当断点命中时,windbg 在当前指令处显示源代码,没有问题。但我想在其他地址查看源代码。如何像反汇编一样查看给定地址的源代码?我们使用“u”?

查看源代码的命令是什么?谢谢

【问题讨论】:

    标签: debugging windbg


    【解决方案1】:

    .open -a 是你的朋友。如果你的符号设置正确,它将打开包含指定地址代码的源代码。

    【讨论】:

      【解决方案2】:

      如果您有调试代码的源代码,为什么要从 windbg 浏览/查看它?源码模式让调试变得非常简单,但是windbg并不是一个“代码浏览器”。

      如果您想查看给定地址的源代码,只需检查什么函数“覆盖”了该地址,例如:

      kd> uf fffff800`02be05d0
      nt!NtOpenFile:
      fffff800`02be05b0 4c8bdc          mov     r11,rsp
      ...
      fffff800`02be05d0 458953e0        mov     dword ptr [r11-20h],r10d    
      

      然后 ctrl-o 并打开包含此函数的源代码(除非您为 microsoft 工作:D,否则您的 func ofc)并在 windbg 中浏览它。

      【讨论】:

      • 同意 :-) 而且一旦你知道地址所在的函数,执行 'uf binary!functionname' 这将显示源代码对应行的汇编代码和源文件位置跨度>
      • 这在 lambda 函数的情况下并不容易。通常,您会看到包含类似 lambda_unnamed_3454564735() 的调用堆栈。
      • AndreiM,如果您知道您的 lambda 的名称,您肯定可以找出它在源代码中的位置。使用 x 在(私有)符号中搜索您的 lambda 名称,如下所示:"x [modulename]!`lambda::operator()" 然后在该地址执行 u。最新版本的 windbg (10.0.10586.567) 肯定会做到这一点。这不是 100% 直截了当的,但至少它有效。
      猜你喜欢
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 2012-08-06
      • 2014-12-31
      • 2018-08-05
      • 1970-01-01
      • 2018-10-08
      相关资源
      最近更新 更多