Debug - WinDbg

1        調試驅動

WinDbg是調試Windows Driver的重要工具。要想進行調試,必須選擇一種Host和Target的連接方式,我這裏選擇的是串口連接,使用串口線將Host和Target連接起來。


1.1  準備一個例子

之前做過AVStream的相關項目,我們就編譯一個WDK中AVStreame的例子,啓動x86 Checked Build Environment,進入\7600.16385.0\src\AVStream\avshws目錄,敲入”build -ceZg”,編譯通過則例子就準備好了。

1.2  設置Target

首先拷貝一份啓動項,在命令行下執行”bcdedit /copy {Current} /d {MyDebug}”。然後使用msconfig配置啓動項,運行msconfig打開System Configuration,進入Boot,選擇MyDebug,進入Advancedoptions,勾選Debug,Debug port, Baud rate設置爲115200,點擊OK退出,將MyDebug設置爲default啓動項。這樣系統就會以Debug模式啓動了。

將編譯後的avshws.sys及avshws.inf拷貝到Target,通過Device Manager安裝驅動。打開DeviceManager->Add Hardware->Install the hardware that I manually select from alist (Advanced),選擇Sound, video and gamecontrollers,然後從Hard Disk找到相應的inf文件,安裝即可。

由於avshws是一個AVStream的fitler,可以通過GraphEdit來使用,在GraphEdit->Graph->InsertFilters->WDM Streaming Capture Devices下可以找到avshws Source這個filter,加入到graph,右鍵點擊Capture,然後Render Pin,這個Garph就創建好了,點擊Play可以切換到Play狀態。Target側的準備工作就好了,下面我們來設置Host。



1.3  設置Host

運行WinDbg,File->Kernel Debug,如下設置,其中com口依據實際情況進行設置:

點擊OK,從新啓動Target,帶系統啓動之後應該可以考到WinDbg已經連接到Target了,然後設置正確的File->SymbolFile Path(即pdb所在目錄)和File->Source FilePath,使用Ctrl+Break可以使WinDbg進入Break狀態,在Break狀態可以進行斷點的設置,查看變量的情況等,就和普通的IDE沒有什麼區別了。設置幾個斷點,然後運行Target上的Graph看看是否可以斷下來。


1.4  斷點的設定(bp,ba)

在kd>命令行下可以使用命令進行斷點設置。

bp, 之前只作爲普通的斷點使用,其實它可以更強大一些,完整命令如下:

bp[ID] [Options] [Address [Passes]]["CommandString"]

我們可以設置斷點hit多少次之後停下來,例如:bp moudle!function+0x1a510 , 斷點hit 10次後停下來。

也可以設置爲斷點hit之後打印一段話不停下來,例如:bp module!function +0x1a5".echo run to here; g" ,打印run to here,不斷下來.

也可以打印某個變量的值,例如:bp moudule!function+0x1a5 "dt mystruct;.echo mystructin module; g" , 打印mystruct變量的數據,一個結構的各個成員將被打印.

 

ba, 某個地址被訪問之後斷點起作用,這種斷點對於某些莫名的內存問題的調試非常有用,完整命令如下:

ba[ID] Access Size [Options] [Address[Passes]] ["CommandString"]

可以設置某個地址被寫就斷下來,例如:mystruct->parm1的地址爲0x9bf116b9, 可以設置  ba w1 0x9bf116b9 ,即當mystruct->parm1被寫時就會斷下來.

2        調試應用程序及DLL

使用WinDbg調試應用程序和DLL可以避免在Target安裝龐大的IDE,只要把編譯好的工程整體拷貝到Target,運行WinDbg,File->Attach to aProcess(可以調試DLL,Attach一個DLL的調用者) 或者 File->OpenExecutable,然後設置正確的Symbol path和Source Path即可,很方便。

3        !htrace 命令

這個命令是近期才發現的,可見學無止境,知道的永遠是皮毛。Htrace主要是用來調試句柄的,既可以Kernel  mode也可以user mode。具體可以參考WinDbg的幫助文檔,要想使用htrace還需要一個調試的工具gflags.exe,這個工具存在於Debugging tools目錄中,如果安裝了WDK,這個目錄也就應該存在了,如果沒有可以在WDK的安裝盤中找到dbg_x86.msi安裝文件,然後進行安裝就可以了。
發佈了41 篇原創文章 · 獲贊 3 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章