什麼是debugging?
從程式或者設計中找到並移除bug,就是debugging。還有一個意思就是使用工具來確認系統失敗或者程式錯誤的可能原因。
一些基本術語
Call Stack
是一種基本的,用來儲存程式函數調用的,並包括所涉及的傳入參數的,資料結構。
Exception
一個由某個特別的機器指令的執行導致的錯誤情況。可以使硬體引起的也可以使軟體引起的。
I/O Request Packet (IRP)
表示io請求並控制io請求執行的一種資料結構。
Interrupt
一種正常命令的執行被打斷,然後控制被傳送給中斷處理器的情況。
Interrupt Request Level (IRQL)
中斷的優先順序。優先順序高於處理器的IRQL的中斷,就會優先處理,低的就會被阻擋掉,不會影響當前的執行。
Kernel Mode
特權程式和作業系統的處理器訪問模式。這種模式下的進程有權訪問作業系統的任何部分,並不像user-mode進程那樣受限制。也就是說,所有的核心態進程共用相同的地址空間。
Nonpaged Pool
指系統記憶體中不能被按頁映射到磁碟上的部分。
Paged Pool
與上面相反,這個就是可以映射到磁碟的部分了。它不僅僅指已經被映射到磁碟上了的記憶體,也包括任意准許映射的記憶體。
Paging
記憶體管理器把記憶體分頁從記憶體中轉移到磁碟中的一種虛擬記憶體操作。當一個線程尋找一個分頁沒找到的時候,就會發生Page fault。
Process
進程就是一系列資源的容器,這些資源供執行程式的線程來使用。Program和Process看起來很像,他們有著根本的不同。Program是一個靜態指令序列,而Process是一個資源的容器。
Register
寄存器,也就是由CPU直接使用的超快速的儲存空間。
Thread
線程是一個進程內的用來執行的實體。
User Mode
應用程式使用的處理器訪問模式。在該模式下的進程在它們自己的虛擬位址上使用CPU。他們不能擁有對系統許多部分的直接存取權,包括系統硬體,沒分配給他們的記憶體,還有一些可能危及到系統完整性的敏感地帶。因為在這種模式下的進程已經與系統和其他使用者態模式下的進程隔離開了,他們不能訪問這些資源。
Attach
將debugger與運行中的程式串連起來的動作。
Blue Screen
大名鼎鼎的藍屏,當Windows作業系統遭遇硬體問題時,或者遭遇關鍵資料不一致,或者其他嚴重的錯誤時,作業系統會自動的當機,然後在藍色的螢幕上顯示錯誤資訊。
藍屏時最重要的資訊就是那個message code,也叫bug check code。
Breakpoint
debugger允許使用者指定一個點,在該點出停止程式的執行。
Crash Dump File
當嚴重錯誤出現時,你可以指定作業系統寫入資訊到硬碟上的crash dump檔案中。這個檔案中包含debugger可以用來分析錯誤的資訊。
Debug Session
實際的使用軟體debugger來分析一台電腦上崩潰的軟體組件的過程就叫做debug session,也可以指分析一個已經儲存下來的dump檔案的過程。
Disassembly / Assembly Code
反組譯碼,彙編代碼。微處理器都只能識別特別為它定製的一系列指令的集合。當一個程式編譯結束,編譯器就會把程式加工成為一些列的底層硬體可以理解的指令。將二進位的指令換成可以理解的助記符,就得到了彙編代碼。這個過程叫做反組譯碼。
Host Machine
運行debugging session的機器叫做host machine。
Local debugging
當debugger,被debug的程式都在一台機器上的時候,這樣的debugging session叫做local debugging。
Remote Debugging
debugger在host machine中,被debug的程式在目標機器上。
Symbol Files
包括原始碼和所有的標示符(變數,函數名)映射的,在編譯時間建立的,給debugger使用的檔案。
Target Application
也就是debuggee
Target Machine
目標機器,前面的解釋挺清楚了。
debugger的種類
CDB--- Microsoft Console Debugger
NTSD---Microsoft NT Symbolic Debugger
KD--- Microsoft Kernel Debugger
WinDbg--- Microsoft Windows Debugger