2017-08-01 136 views
0

這是一個愚蠢的。我在內核模塊中遇到了一個問題,每50-100次重啓只會發生一次,我想在windbg中打開一行,然後在檢測到問題沒有發生時重新啓動測試機器。它可以重新啓動並查看下次是否發生故障。如何在重新連接時使windbg強制加載符號?

問題是,我想讓windbg停止在啓動過程中的斷點處,在那裏我可以看到問題發生。 但是當測試機重新啓動時,windbg會變得不連貫(隨着機器的消失),然後當Windows啓動時它會再次連接。它加載我的工作空間,但它似乎沒有加載符號,因此錯過了我的斷點。

如果我將「cycle initial break」設置爲on,那麼一旦windbg連接,它就會中斷並加載我的符號,然後我按f5繼續,然後如果我的斷點被擊中,它就會停止。 但關鍵是自動執行此操作,我不想在每次重新啓動測試計算機時都坐在那裏並按f5。

有沒有辦法強制windbg加載連接符號,即使它還沒有停止?

回答

1

是的,您可以創建一個腳本文件並在啓動kd時使用「-cfr」參數指定文件名。調試器啓動時的腳本文件,以及目標何時重新啓動。

在你的腳本文件中,只需放置.reload命令,你應該很好。從微軟

文檔:

調試腳本文件: 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

使用

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 
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 
+0

我現有的斷點,獲得與工作區重載拉中採取行動,讓一切都在那裏,我m很確定這只是不加載的符號導致的問題,因爲當我手動插入時,.reload/f然後一切按計劃進行。感謝您的提示。我是windbg的新手,不知道sxe。 – stu