-----------------------------《軟件調試》前言---------------------------------------------------------------------------
指令集(Instruction Set):一臺計算機認識的所有指令
程序:按照一定格式編寫的指令序列
通用計算機:同一臺計算機,執行不同的指令,就可以完成不同的任務
軟件(Software):計算機程序和他的文檔
軟件開發(Software Development):將用戶需求轉變成產品的過程
臭蟲(Bug),軟件缺陷(Defect):隱藏在軟件中的設計失誤。19世紀七bug就被用來描述電子設備中的設計缺陷。愛迪生就用過。
-----------------------------《軟件調試》第一章---------------------------------------------------------------------------
軟件調試(Software Debugging):探索軟件缺陷根源並尋求解決方案的過程,重現軟件故障(failure),定位故障根源,解決軟件故障。To detect,locate and correct logicalor syntactical error in a program or malfunctions in hardware。
重現故障:在用於調試的系統上重複導致故障的步驟,是要調試的問題出現在被調試系統中
定位:使用各種工具調試手法找到導致軟件故障的根源(root cause)。
解決軟件故障:探索和實現解決方案並驗證之,驗證OK則關閉問題。
軟件調試分類:
按被調試程序運行的操作系統劃分:DOS軟件調試,WINDOWS軟件調試,LINUX軟件調試。通常針對編譯爲機器碼的native程序而言。.Net和Java這樣的不在其中。
俺目標代碼執行方式分:腳本語言開發叫腳本調試,用的是腳本調試器。相對應的是編譯執行程序調試,而他又分爲本地調試(C/C++)和託管調試(C#,JAVA)和混合調試(同一個調試會話中既包含本地代碼調試,又包含託管代碼調試)。
按目標代碼執行分:用戶模式調試,內核態調試。
按調試階段分:開發期調試(發佈前),產品期調試(產品發佈後,主要靠客戶客戶反饋和軟件自動錯誤報告機制獲得)
產品其調試特點:很可能與特定的使用環境和使用方式有關;問題範圍更大,解決過程時就逐漸縮小問題範圍,有的問題根源不屬於本產品;有些模塊可能是別的公司的,沒有代碼和文檔,需要彙編級分析跟蹤和堆棧數據;通常無法再客戶機上調試;更緊迫。
按調時器與調試目標的相對位置分:被調試程序和調時期在同一系統中,成爲本機調試(包括在同一臺機器上不不同虛擬機中);調試器和被調試程序不在同一臺計算機上,通過以太網或其他某種連接完成調試的,稱作遠程調試(USB,1394調試windows內核,不算遠程調試)。
按調是目標活動性分:活動目標調試(Live Target Debugging)和轉儲文件調試(Dump File Debugging)。轉儲文件以文件形式將調試目標內存凝固下來,包含某時刻程序運行狀態,這是定位產品期問題,系統崩潰和應用程序崩潰的一種有效方式。
按調試工具分:調試器調試(斷點,單步執行,跟蹤執行),不使用調試器調試(調試信息輸出,日誌文件,觀察內存和文件等)
調試技術:
a.斷點(Breakpoint):CPU執行到某位置的時候,停止執行被調試程序,中斷到調試器(break into debugger),讓調試者分析調試。調試者分析完後,可以讓被調試程序恢復執行。
按斷點設置空間分爲:
代碼斷點:設置在內存空間中的斷點,其地址通常是某一段代碼的起始處
數據斷點:設置在內存空間中的斷點,其地址一般要見識變量的起始地址。當被調試程序訪問指定內存地址的數據時斷點命中。根據需要,可定義出發斷點的方式和寬度。
IO斷點:設置在IO空間中的斷點,其地址爲某IO地址。當程序訪問指定io地址的端口是中斷到調試器。也可以設置被觸發的寬度。
按斷點設置方法分爲:
硬件斷點:設置CPUde調試寄存器來設置,IA32有8個調試寄存器DR0-DR7,對一個調時會話,可同時設置最多4個硬件斷點。
軟件斷點:想制定代碼位置摻入專業斷點指令是先,如IA32 CPU的int 3指令(機器指令0xCC)
追蹤點(Tracepoint):設置一個追蹤點時,調試器內部會做特殊的斷點來處理。當調試器受到斷點時間後,會找出追蹤點定義的行爲,通常打印提示信息或者變量值,燃盡皮被調試程序繼續執行。(這個號自動啊,不錯不錯)
條件斷點(Conditional Breakpoint):類似於最總店,用戶設置一個條件斷點時馬士基插入一個無條件斷點,然後再命中時候,調試器檢查這個斷電的附加條件,如果不滿足立刻恢復執行,滿足則中斷給用戶。
b.單步執行
c.輸出調試信息
d.日誌
e.事件追蹤
f.轉儲文件
g.棧回朔
h.反彙編
i.觀察修改數據
j.控制被調試線程進程