第1章 預備知識 1
1.1 本書使用的調試工具 1
1.2 編程語言 2
1.3 調試的原則 2
1.3.1 調試的本質:確認原則 2
1.3.2 調試工具對於確認原則的價值所在 2
1.3.3 其他調試原則 3
1.4 對比基於文本的調試工具與基於GUI的調試工具,兩者之間的摺中方案 4
1.4.1 簡要比較界麵 4
1.4.2 摺中方法 9
1.5 主要調試器操作 11
1.5.1 單步調試源代碼 11
1.5.2 檢查變量 12
1.5.3 在GDB、DDD和Eclipse中設置監視點以應對變量值的改變 14
1.5.4 上下移動調用棧 14
1.6 聯機幫助 15
1.7 初涉調試會話 16
1.7.1 GDB方法 18
1.7.2 同樣的會話在DDD中的情況 31
1.7.3 Eclipse中的會話 34
1.8 啓動文件的使用 38
第2章 停下來環顧程序 39
2.1 暫停機製 39
2.2 斷點概述 39
2.3 跟蹤斷點 40
2.3.1 GDB中的斷點列錶 40
2.3.2 DDD中的斷點列錶 41
2.3.3 Eclipse中的斷點列錶 42
2.4 設置斷點 42
2.4.1 在GDB中設置斷點 42
2.4.2 在DDD中設置斷點 45
2.4.3 在Eclipse中設置斷點 46
2.5 展開GDB示例 46
2.6 斷點的持久性 48
2.7 刪除和禁用斷點 50
2.7.1 在GDB中刪除斷點 50
2.7.2 在GDB中禁用斷點 51
2.7.3 在DDD中刪除和禁用斷點 51
2.7.4 在Eclipse中刪除和禁用斷點 53
2.7.5 在DDD中“移動”斷點 53
2.7.6 DDD中的Undo/Redo斷點動作 54
2.8 進一步介紹瀏覽斷點屬性 55
2.8.1 GDB 55
2.8.2 DDD 56
2.8.3 Eclipse 56
2.9 恢復執行 56
2.9.1 在GDB中 57
2.9.2 在DDD中 64
2.9.3 在Eclipse中 66
2.10 條件斷點 66
2.10.1 GDB 67
2.10.2 DDD 69
2.10.3 Eclipse 69
2.11 斷點命令列錶 70
2.12 監視點 74
2.12.1 設置監視點 75
2.12.2 錶達式 77
第3章 檢查和設置變量 78
3.1 主要示例代碼 78
3.2 變量的高級檢查和設置 80
3.2.1 在GDB中檢查 80
3.2.2 在DDD中檢查 84
3.2.3 在Eclipse中檢查 86
3.2.4 檢查動態數組 88
3.2.5 C++代碼的情況 90
3.2.6 監視局部變量 92
3.2.7 直接檢查內存 92
3.2.8 print和display的高級選項 93
3.3 從GDB/DDD/Eclipse中設置變量 93
3.4 GDB自己的變量 94
3.4.1 使用值曆史 94
3.4.2 方便變量 94
第4章 程序崩潰處理 96
4.1 背景資料:內存管理 96
4.1.1 為什麼程序會崩潰 96
4.1.2 內存中的程序布局 97
4.1.3 頁的概念 99
4.1.4 頁的角色細節 99
4.1.5 輕微的內存訪問程序錯誤可能不會導緻段錯誤 101
4.1.6 段錯誤與Unix信號 102
4.1.7 其他類型的異常 105
4.2 核心文件 106
4.2.1 核心文件的創建方式 106
4.2.2 某些shell可能禁止創建核心文件 107
4.3 擴展示例 108
4.3.1 第一個程序錯誤 111
4.3.2 在調試會話期間不要退齣GDB 113
4.3.3 第二個和第三個程序錯誤 113
4.3.4 第四個程序錯誤 115
4.3.5 第五個和第六個程序錯誤 116
第5章 多活動上下文中的調試 120
5.1 調試客戶/服務器網絡程序 120
5.2 調試多綫程代碼 125
5.2.1 進程與綫程迴顧 125
5.2.2 基本示例 127
5.2.3 變體 132
5.2.4 GDB綫程命令匯總 133
5.2.5 DDD中的綫程命令 134
5.2.6 Eclipse中的綫程命令 134
5.3 調試並行應用程序 136
5.3.1 消息傳遞係統 136
5.3.2 共享內存係統 141
5.4 擴展示例 143
5.4.1 OpenMP概述 143
5.4.2 OpenMP示例程序 144
第6章 特殊主題 155
6.1 根本無法編譯或加載 155
6.1.1 語法錯誤消息中的“幽靈”行號 155
6.1.2 缺少庫 160
6.2 調試GUI程序 162
第7章 其他工具 172
7.1 充分利用文本編輯器 172
7.1.1 語法突齣顯示 172
7.1.2 匹配括號 174
7.1.3 Vim與makefile 175
7.1.4 makefile和編譯器警告 176
7.1.5 關於將文本編輯器作為IDE的最後一個考慮事項 177
7.2 充分利用編譯器 178
7.3 C語言中的錯誤報告 178
7.4 更好地使用strace和ltrace 182
7.5 靜態代碼檢查器:lint與其衍生 184
7.5.1 如何使用splint 185
7.5.2 本節最後注意事項 185
7.6 調試動態分配的內存 185
7.6.1 檢測DAM問題的策略 188
7.6.2 Electric Fence 188
7.6.3 用GNU C庫工具調試DAM問題 190
第8章 對其他語言使用GDB/DDD/Eclipse 196
8.1 Java 196
8.1.1 直接使用GDB調試Java 198
8.1.2 使用DDD與GDB調試Java 201
8.1.3 使用DDD作為JDB的GUI 201
8.1.4 用Eclipse調試Java 201
8.2 Perl 202
8.2.1 通過DDD調試Perl 204
8.2.2 在Eclipse中調試Perl 206
8.3 Python 207
8.3.1 在DDD中調試Python 208
8.3.2 在Eclipse中調試Python 209
8.4 調試SWIG代碼 210
8.5 匯編語言 213
· · · · · · (
收起)