这是一个傻瓜。我在内核模块中遇到了一个问题,每50-100次重启只发生一次,我在windbg中有一行我要打破,并且每当检测到问题时我都会重新启动测试机器。 ; t发生了,所以它可以重新启动,看看下次是否发生了故障。
问题是我希望windbg在启动过程中停在断点上,我可以看到问题发生。 但是当测试机器重新启动时,windbg会断开连接(当机器消失时),然后当窗口启动时它再次连接。它加载我的工作区,但它似乎没有加载符号,因此错过了我的断点。
如果我设置"循环初始休息"然后,一旦连接了windbg,它就会断开并加载我的符号,然后我按f5继续然后如果我的断点被击中则停止。 但重点是自动化,我不想坐在那里,每次测试机器重新启动时都按f5。
有没有办法强制windbg在连接上加载符号,即使它还没有停止?
答案 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