1,
專業(yè)成都網站建設公司,做排名好的好網站,排在同行前面,為您帶來客戶和效益!創(chuàng)新互聯為您提供成都網站建設,五站合一網站設計制作,服務好的網站設計公司,網站制作、網站建設負責任的成都網站制作公司!.reload
k 當前調用堆棧。
u 當前正在執(zhí)行的代碼。
2,
~ 查看被調試進程中的線程信息
每一行是一個線程的信息。第一行中,0 表示這個進程的編號;1ff4.1038 是 16 進制數
字,前者是當前進程的進程 ID,后者是線程 ID;后面的信息是線程狀態(tài)和 Teb 地址。第二
行的線程編號前有一個點號“.”,表示這是當前線程,也就是剛才使用 u 和 k 命令查看到的
線程。
0:046>,冒號前的數字表示當前的進程號,同時調試多個進程
時,每個進程都會被指派一個進程號;冒號后的 000 表示線程號。
進行內核調試時,如果是單處理器系統,提示符是 kd>的形式;如果
是多處理器系統,則是 0: kd>的形式,前面的 0 表示處理器號。
3,
~threadIDs 切換到指定threadID線程。
4,
軟斷點
bp: 可以直接對某個代碼地址設置斷點。
0:000> bp TestModule!main
在TestModule內的main函數設置斷點。同直接F9。
bl 查看已經存在的斷點,bd禁用斷點,de重啟斷點,bc刪除斷點。
0:000> bl
0 e 00401030 [C:UsersNetRocDesktopTestDebug1T estDebug1.cpp @ 23]
1 e 0040105d [C:UsersNetRocDesktopTestDebug1T estDebug1.cpp @ 27]
如上面命令輸出中的第二行,1 表示斷點 ID。當禁用、重新啟或刪除斷點,或者其他命令來操作這個斷點時,都需要用到這個 ID;
第二個“e”表示斷點是啟用的,如果是“d”則表示當前被禁用,如果帶“u”則說明是后面將要介紹的未定斷點;第三列的 0040105d 是該斷點的地址;
后面的內容是斷點所在的源文件和行號。
對于還沒有加載到內存中的模塊,比如在調用了 LoadLibrary 之后才加載的DLL。如果使用 bp 來對這個模塊中的函數設置斷點,會找不到符號,這時就會被調試器自動轉變成用 bu 命令來設置的未定斷點。
bu 可以對還不能識別的符號設置斷點,當系統中有新模塊加載進來時,調試器會對未定斷點再次進行識別,如果找到了匹配的符號則會設置它。
對于bu的斷點上面斷點ID后面的e顯示是eu,表示啟用的未定斷點。
5,
硬斷點 ba:
ba 訪問斷點可以在某個內存地址處的數據被讀取、寫入或者執(zhí)行的時候中斷下來。
首先用.restart 命令重新啟動調試目標。
對局部變量 x 有賦值操作 x *= 10 。
輸入 ba w4 @@C++(&x)命令?!?i”表示變量 i 的地址,“w”表示寫入操作,“4”表示只處理&x地址處 4 字節(jié)的寫入操作。F5 運行,程序被成功中斷下來 Breakpoint 1 hit。
WinDbg 的數據斷點是通過 CPU 硬件斷點實現的。而 DRx 寄存器所設置的內存訪問斷
點屬于陷阱(Trap)而不是錯誤(Fault),CPU 對陷阱的處理是執(zhí)行完該條指令后觸發(fā)異常。因
此 WinDbg 只能在之后的一條指令處斷下來。
Windows 調試工具支持兩種語法的表達式:MASM 語法和 C++語法。如果沒有特別指
明的話,默認是使用 MASM 表達式語法。一般來說,MASM 語法的表達式用來表示地址比
較方便,而 C++表達式用來表示結構或者類成員比較方便。可以通過@@C++(…)或者
@@masm(…)來包含表達式以明確指明所使用的語法。當使用 MASM 語法時,可以用雙冒
號(::)或者雙下劃線(__)來表示類成員;但是使用 C++語法時則只能使用雙冒號。
6,
d :查看內存
db ?。喊碽yte查看內存
dd : 按DWORD查看內存
dv :查看當前作用域下局部變量的類型和值
? x : ?表達式求值命令常常用來查看符號所代表的值。 ? x 命令,它可以顯示符號 x 對應的值,即局部變量 x的地址。
r ?。翰榭椿蛘咝薷募拇嫫骱蛡渭拇嫫?/p>