善用軟體內建的除錯功能#
程式是複雜的,因此許多軟體都內建了 debugging 支援。這些功能可以:
- 透過停用 background 或 multi-threaded 執行,讓程式更容易除錯
- 精確定位失敗的 test case 並選擇性執行
- 提供效能相關的報告與資訊
- 引入額外的 logging
如何找到這些功能#
在你正在除錯的軟體中搜尋文件和原始碼中的 debug 關鍵字。這可以指引你找到:
- Command-line 選項
- Configuration 設定
- Build 選項
- Signals(Unix)、registry settings(Windows)
- Command-line interface 的除錯指令
啟用 debugging 選項通常會讓程式透過 verbose output 運作得更透明,有時甚至會簡化操作。但要注意,這些設定有時也會讓某些 bug 消失。
實際範例#
Shell Script 除錯#
Unix shell 的 -x 選項可以顯示執行的每個命令,對於除錯複雜的 text substitution 問題非常有用:
sh -x script.sh輸出會展示命令和變數替換的詳細過程。
SSH 連線除錯#
排查 SSH 連線問題時,可以組合多個選項:
# Server 端
sudo /usr/sbin/sshd -f ./sshd_config -d -p 1234
# Client 端
ssh -p 1234 server.example.com使用自訂設定檔 (-f)、除錯模式 (-d) 和不同 port (-p),避免影響正式環境。Debug output 的最後一行通常就能指出問題所在,例如:
Authentication refused: bad ownership or modes for directory /home/dds/.sshSQL 查詢效能分析#
使用 EXPLAIN 語句分析查詢效能:
explain select count(*) from commits where au_id = 1;
explain select count(*) from commits where
created_at = '2012-08-01 16:25:36';第一個查詢使用了 index,只掃描 21 行;第二個沒有使用 index,掃描了 2.2 億行。這種差異一目了然。
郵件投遞除錯#
Postfix 的 sendmail 命令支援 verbose (-v) 和指定訊息 (-M) 選項:
sudo sendmail -v -M 1ZkIDm-0006BH-0X輸出的最後一行就能揭示問題(例如 535 Authentication required.)。
重點回顧#
- 找出你正在排查的軟體有哪些 debugging facilities,並善用它們來調查問題