檢視 Local 變數#
最快速的方式是顯示函式的 local 變數清單:
- Eclipse — Window - Show View - Variables 或
Alt-Shift-Q V - Visual Studio — Debug - Windows - Locals 或
Alt-4 - gdb —
info locals或info args
在寫得好的程式碼中,local 變數的數量不多,且足以提供追蹤執行所需的所有資訊。
如果某些表達式太複雜難以理解,考慮在程式碼中引入具名的暫時變數來簡化。不用擔心效能問題,編譯器會將其最佳化掉。
檢視任意表達式#
表達式的值有時和你預期的不同。當程式行為令人費解時,直接查看表達式的值:
- Eclipse — 選取表達式,右鍵選 Inspect;或在 Window - Show View - Display 視窗中輸入表達式
- Visual Studio — 將滑鼠 hover 在選取的表達式上;或開啟 Debug - QuickWatch(
Shift-F9) - gdb —
print expression
Debugger 只能在目前 stack frame 中定義的變數範圍內求值表達式。
持續監看表達式#
要觀察表達式在程式執行過程中的變化:
- Eclipse — Window - Show View - Expression
- Visual Studio — Debug - Windows - Watch(值改變時會以紅色標示)
- gdb —
display expression
複雜資料結構的視覺化#
各種工具提供了視覺化複雜資料型別的方式:
- Visual Studio — 撰寫 custom visualizer 來自訂顯示格式
- gdb — 使用 pretty-printer 機制
- QtCreator — 使用 debug visualizers
- Python —
pprint模組的PrettyPrinter - Perl —
Data::Dumper模組 - JavaScript —
JSON.stringify(obj, null, 4) - Python Tutor — 線上工具,可視覺化 Python/Java/JavaScript/Ruby 的執行過程與資料結構
- Graphviz dot — 撰寫小腳本將資料轉為圖形
重點回顧#
- 養成驗證關鍵表達式值的習慣,不要假設它們是對的
- 設定持續監看來觀察表達式在演算法執行過程中的變化
- 透過 local 變數追蹤函式的執行邏輯
- 善用各種資料視覺化工具來理解複雜的資料結構