善用軟體內建的除錯功能#

程式是複雜的,因此許多軟體都內建了 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/.ssh

SQL 查詢效能分析#

使用 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,並善用它們來調查問題