【问题标题】:How can I make windbg force load symbols on reconnect?如何在重新连接时制作 windbg 强制加载符号?
【发布时间】:2018-01-08 15:49:14
【问题描述】:

这是一个愚蠢的。我在内核模块中遇到了一个问题,每 50-100 次重新启动时才会发生一次,我在 windbg 中有我想要中断的线路,并且只要检测到问题没有发生,我就会让测试机器重新启动所以它可以重新启动,看看下次是否会发生故障。

问题是我希望 windbg 在启动过程中的断点处停止,在那里我可以看到问题发生。 但是当测试机器重新启动时,windbg 会断开连接(因为机器已经消失),然后当 Windows 启动时它会再次连接。它加载了我的工作区,但似乎没有加载符号,因此错过了我的断点。

如果我将“循环初始中断”设置为打开,那么一旦连接了 windbg,它就会中断并加载我的符号,然后我按 f5 继续,然后如果我的断点被击中,它就会停止。 但关键是要自动执行此操作,我不想每次测试机器重启时都坐在那里按 f5。

有没有办法强制windbg在连接上加载符号,即使它还没有停止?

【问题讨论】:

    标签: windows kernel windbg


    【解决方案1】:

    是的,您可以创建一个脚本文件并在启动 kd 时使用“-cfr”参数指定您的文件名。调试器启动时以及目标重新启动时的脚本文件。

    在你的脚本文件中,只要输入 .reload 命令就可以了。

    来自 Microsoft 的文档:

    调试器脚本文件: https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/using-script-files

    KD 命令行选项(用于文件名的 cfr 参数) https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/kd-command-line-options

    【讨论】:

      【解决方案2】:

      使用

      sxe -c ".reload /f;g" ibp ; .reboot
      

      此命令将请求初始中断,当损坏时将加载符号 并发出 go 你也可以在此处将断点设置为命令,它将像这样执行

      kd> sxe -c ".reload /f;bp nt!IopInitializeBootDrivers;g" ibp ; .reboot
      
      Shutdown occurred at (Wed Aug  2 13:14:49.008 2017 (UTC + 5:30))...unloading all symbol tables.
      
      Waiting to reconnect...
      Connected to Windows XP 2600 x86 compatible target at (Wed Aug  2 13:15:08.627 2017 (UTC + 5:30)), ptr64 FALSE
      Kernel Debugger connection established.  (Initial Breakpoint requested)
      
      
      Loading Kernel Symbols
      
      * does, press "g" and "Enter" again.                                          *
      *                                                                             *
      *******************************************************************************
      
      
      Breakpoint 0 hit
      nt!IopInitializeBootDrivers:
      806aa839 8bff            mov     edi,edi
      
      kd> k
       # ChildEBP RetAddr  
      00 fc8d3694 806a06df nt!IopInitializeBootDrivers
      01 fc8d383c 806a1a6c nt!IoInitSystem+0x712
      02 fc8d3dac 8057aeff nt!Phase1Initialization+0x9b5
      03 fc8d3ddc 804f88ea nt!PspSystemThreadStartup+0x34
      04 00000000 00000000 nt!KiThreadStartup+0x16
      

      【讨论】:

      • 我现有的断点在工作区重新加载时被拉入,所以就这些了,我很确定只是没有加载的符号导致了问题,因为当我手动闯入时,.reload / f 然后一切都按计划进行。感谢您的提示。我是windbg的新手,不知道sxe。
      猜你喜欢
      • 2016-12-25
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 2012-03-26
      相关资源
      最近更新 更多