Debug Hacks 除錯駭客-極致除錯的技巧與工具

吉岡弘隆、大和一洋、大岩尚宏、安部東洋、吉田俊輔 著、Studio Tib. 譯

立即出貨 (庫存 > 10)

買這商品的人也買了...

商品描述

極致除錯的技巧與工具

Miracle Linux的精銳工程師們,詳細解說長年Linux開發經驗累積的除錯知識。從預備基礎、必要知識,快速找到bug的原因、進行修正的便利技巧與工具,一直到進階除錯技巧都毫不保留地披露。滿載許多從實際範例推演的實用技巧,是高效率開發高品質程式必備的一本書。

本書所需的知識與目標讀者

本書主要的對象,是使用C/C++等程式語言的應用程式開發者、以及Linux kernel開發者。本書沒有特別假設語言、開發環境,但舉例的時候是使用Linux環境。在做低階除錯的時候,需要電腦架構、程式語言的基礎知識。另外也需要作為開發環境的Unix系列程式設計環境的基礎知識。除此之外的知識並未多做假設。

設想的讀者,是自己設計程式、實做、測試、除錯的初級到中級程式設計者;寫給希望進一步提昇自己程式設計能力的讀者。我們認為不僅C/C++程式設計者能獲益,對使用Perl/PHP/Python/Ruby等scripting語言寫程式的讀者來說,我們提到的許多手法,就算是語言、工具不一樣,還是能作為參考。另外對使用Windows與Mac等不同平台的程式設計者來說,同樣具有參考價值。

我們特別希望學生能閱讀本書。在看過一輪程式設計語言的入門書之後,如果想進一步精通程式設計的話,本書的hacks應該很有參考價值。我們總是抱著「如果這本書出現在自己學生時代的話一定很想看」的心態在編輯這本書。

對使用scripting語言寫程式的人來說,平常幾乎不會意識到電腦架構、機器語言等等。但若是Ruby的執行環境突然segmentation fault當掉、需要修復的時候,就需要本書討論的知識與技法了。對希望擴充自身程式設計領域的人來說,本書應該能成為契機。

我們也十分希望擁有獨自風格的hacker(程式設計老手)能閱讀本書,特別是現在幾乎沒有直接討論Linux kernel除錯的參考書,有關我們對這本書的組成,包含討論範圍、假想讀者群等等,不必客氣,儘管提供意見。當然如果能知道各位讀者「如果是自己的話會這麼做」的想法就太棒了。

目錄大綱

推薦序
作者與致謝
寫在前面
第一章 暖身準備
1. 何謂除錯?
2. Debug Hacks 地圖
3. Debug 經驗談
第二章 Debug 之前應該知道的事情
4. 取得 Process 的 Core Dump
5. Debugger (GDB) 的基本用法 (之一)
6. Debugger (GDB) 的基本用法 (之二)
7. Debugger (GDB) 的基本用法 (之三)
8. Intel 架構的基礎
9. Debug 需要的 Stack 基礎知識
10. 呼叫函式時傳遞引數的方式 (x86_64 篇)
11. 呼叫函式時傳遞引數的方式 (i386 篇)
12. 呼叫函式時傳遞引數的方式 (C++ 篇)
13. Assembly 的鍛鍊法
14. 從 Assembly 找出對應的原始碼
第三章 Kernel Debug 的準備 
15. Oops 訊息的解讀法
16. 以 minicom 連上 serial console
17. 透過網路取得 kernel message
18. 透過 SysRq 按鍵進行除錯的方法
19. 使用 diskdump 取得 kernel crash dump
20. 使用 Kdump 取得 kernel crash dump
21. crash 指令的用法
22. 透過 IPMI watchdog timer 取得 freeze 時的 crash dump
23. 透過 NMI watchdog 取得 freeze 時的 crash dump
24. Kernel 特有的 Assembly 指令 (之一)
25. Kernel 特有的 Assembly 指令 (之二)
第四章 應用程式 Debug 實務
26. 程式接到 SIGSEGV 異常終止
27. Backtrace 無法正確顯示
28. 操作陣列失誤導致破壞記憶體內容
29. 活用 Watchpoint 偵測記憶體操作失誤
30. malloc() 與 free() 時發生問題
31. 應用程式卡住 (死結篇)
32. 應用程式卡住 (無窮迴圈篇)
第五章 Kernel Debug 實務
33. Kernel Panic (取用 NULL 指標篇)
34. Kernel Panic (List 破壞篇)
35. Kernel Panic (Race Condition 篇)
36. Kernel 卡住 (無窮迴圈篇)
37. Kernel 卡住 (Spinlock 篇之一)
38. Kernel 卡住 (Spinlock 篇之二)
39. Kernel 卡住 (Semaphore 篇)
40. Realtime Process 卡住
41. 運作變慢的問題
42. CPU 負荷變高的問題
第六章 致勝 Debug 技巧
43. 使用 strace 尋找問題原因的線索
44. objdump 方便的選項
45. Valgrind 的用法 (基本篇)
46. Valgrind 的用法 (實務篇)
47. 使用 kprobe 取得 kernel 內部的資訊
48. 使用 jprobe 取得 kernel 內部的資訊
49. 使用 kprobe 取得 kernel 內部任意位置的資訊
50. 使用 kprobe 取得 kernel 內部任意位置指定名稱的變數資訊
51. 使用 KAHO 取得 compiler 最佳化過程中移除的變數的值
52. 使用 systemtap 對執行中的 kernel 進行 debug (之一)
53. 使用 systemtap 對執行中的 kernel 進行 debug (之二)
54. 在 /proc/meminfo 可以看到的東西
55. 從 /proc//mem 高速讀取 process 的記憶體內容
56. OOM Killer 的動作與機制
57. Fault Injection
58. 使用 Fault Injection 發現 Linux kernel 潛在的 bug
59. Linux kernel 的 init section
60. 解決性能方面的問題
61. 使用 VMware Vprobe 取得資訊
62. 取得 Xen 的 memory dump
63. 理解透過 GOT/PLT 呼叫函式的機制
64. 為 initramfs image 進行 debug
65. 使用 RT Watchdog 偵測 realtime process 卡住的情形
66. 檢查手邊的 x86 機器是否支援 64-bit 模式
附錄 Debug Hacks 用語的基礎知識
索引