这是一个愚蠢的。 我在内核模块中遇到了一个问题,每50-100次重启只会发生一次,我想要打断windbg的线路,并且只要检测到问题没有发生就重新启动testing机器。它可以重新启动,看下一次是否发生故障。
问题是我想让windbg停止在启动过程中的断点,在那里我可以看到问题的发生。 但是当testing机器重新启动时,windbg变得不安(当机器不在时),然后当Windows启动时它再次连接。 它加载我的工作区,但它似乎没有加载符号,因此错过了我的断点。
如果我将“周期初始中断”设置为打开,那么只要windbg连接,它将打破并加载我的符号,然后我按f5继续,然后如果我的断点被击中,它会停止。 但重点是自动化,我不想坐在那里,每次testing机器重新启动时打f5。
有没有办法强制windbg加载连接符号,即使它还没有停止?
是的,您可以创建一个脚本文件,并在启动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
使用
sxe -c ".reload /f;g" ibp ; .reboot
这个命令会要求一个初始的中断,当中断的时候会加载这些符号并发出去,你也可以在这里设置你的断点作为一个命令,这个命令将会像这样
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 coreel Debugger connection established. (Initial Breakpoint requested) Loading coreel 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