2009-07-27 41 views
1

我有一個驅動程序,可以直接避免BSoD,並將Windows Vista的屏幕變成黑色,並有少量彩色點和條紋。之後我在系統上發現內存轉儲,而DbgView奇妙地向我展示了一個堆棧跟蹤(指出這可能是一個亂碼堆棧,某些部分可能不正確)。可惜的是,在堆棧中找到的命令無法在代碼中看到,這明顯地破壞了整個事物。 (我可以離開我們的整個例程,但不是其中的一部分。)內存轉儲中的DbgPrint?

是否有人知道一種方法來將調試消息存入內存轉儲或不在串口中以在外部調試器中讀取它們? (如果調試器已連接,則我的測試系統會停止運行,但這可能是我對遠程連接的內核調試的方式和原因瞭解不多)。

我想知道點代碼失敗的地方,因爲瀏覽通過代碼看起來對我來說很好,這樣做有些徒勞,我可能需要一些提示。

回答

3

MSDN說明如何設置您的調試會話。

設置步驟:

  1. 安裝2臺電腦,先用你的開發環境,第二是調試目標。 (Vista + Vista64最適合我)
  2. 通過使用火線電纜或零調制解調器電纜設置調試器連接。 (Null-Modem幾乎總能工作,但Firewire從性能角度來看更好,USB很貴,並且對我來說並沒有起作用......)
  3. 設置目標計算機在'調試'模式下啓動MSDN
  4. 讓WinDbg運行並等待內核連接,以調試模式啓動目標計算機。
  5. 啓動時,WinDbg應打印有關目標系統的消息。在這裏您將看到DbgPrint消息等(在Vista中(默認情況下,所有DbgPrint都禁用)(而不是XP),並且您必須啓用它link
  6. 您可以通過定義斷點來設置WinDbg模塊中的斷點。

PS:bcdedit有時無法設置調試模式。我不知道爲什麼。但似乎有一定的順序,你必須告訴它調試參數。嘗試不同的組合可以創造奇蹟......。

當進入進程時,可以使用WinDbg中的命令。一對夫婦的有趣的:

  • 流明顯示當前加載
  • 流明M個模式的所有模塊顯示所有滿足搜索條件(如 「LM米KERNEL32 *」 模塊
  • X MODULE_NAME! function_name_pattern列出模塊中的符號(例如「kernel32!Cre​​ate *」)
  • bl列出所有當前設置的斷點
  • bp module_name!function_name在指定函數的開始位置設置斷點。
  • BC *刪除所有斷點
  • .hh BP顯示幫助 「BP」
  • .reload/U x.sys重載的x.sys模塊調試設置。 (當你想重建你的項目,並得到'無法創建x.pdb ...'信息時,這會很有幫助)。

全部啓用DbgPrint輸出在Vista下:

enable_dbg_print_vista.reg

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter] 
"DEFAULT"=dword:0000000f 
+0

謝謝你讓我的希望。原來我的主要問題是,我沒有按「走」足夠。因此,我的測試系統似乎被調試系統上的空調試器窗口凍結。看起來有點沒用。 (但是您的命令列表對於深入研究是非常有幫助的。)我會添加k,kb,kp,kd以獲取回溯和u,uf,...命令進行反彙編。 – 2009-07-28 07:49:35