如何在重新连接时制作windbg force load符号?

时间:2017-08-01 16:51:18

标签: windows kernel windbg

这是一个傻瓜。我在内核模块中遇到了一个问题,每50-100次重启只发生一次,我在windbg中有一行我要打破,并且每当检测到问题时我都会重新启动测试机器。 ; t发生了,所以它可以重新启动,看看下次是否发生了故障。

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

如果我设置"循环初始休息"然后,一旦连接了windbg,它就会断开并加载我的符号,然后我按f5继续然后如果我的断点被击中则停止。 但重点是自动化,我不想坐在那里,每次测试机器重新启动时都按f5。

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

2 个答案:

答案 0 :(得分:1)

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

在你的脚本文件中,只需输入.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

答案 1 :(得分:1)

使用

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