檢視 Local 變數#

最快速的方式是顯示函式的 local 變數清單:

  • EclipseWindow - Show View - VariablesAlt-Shift-Q V
  • Visual StudioDebug - Windows - LocalsAlt-4
  • gdbinfo localsinfo args

在寫得好的程式碼中,local 變數的數量不多,且足以提供追蹤執行所需的所有資訊。

如果某些表達式太複雜難以理解,考慮在程式碼中引入具名的暫時變數來簡化。不用擔心效能問題,編譯器會將其最佳化掉。

檢視任意表達式#

表達式的值有時和你預期的不同。當程式行為令人費解時,直接查看表達式的值

  • Eclipse — 選取表達式,右鍵選 Inspect;或在 Window - Show View - Display 視窗中輸入表達式
  • Visual Studio — 將滑鼠 hover 在選取的表達式上;或開啟 Debug - QuickWatchShift-F9
  • gdbprint expression

Debugger 只能在目前 stack frame 中定義的變數範圍內求值表達式。

持續監看表達式#

要觀察表達式在程式執行過程中的變化:

  • EclipseWindow - Show View - Expression
  • Visual StudioDebug - Windows - Watch(值改變時會以紅色標示)
  • gdbdisplay expression

複雜資料結構的視覺化#

各種工具提供了視覺化複雜資料型別的方式:

  • Visual Studio — 撰寫 custom visualizer 來自訂顯示格式
  • gdb — 使用 pretty-printer 機制
  • QtCreator — 使用 debug visualizers
  • Pythonpprint 模組的 PrettyPrinter
  • PerlData::Dumper 模組
  • JavaScriptJSON.stringify(obj, null, 4)
  • Python Tutor — 線上工具,可視覺化 Python/Java/JavaScript/Ruby 的執行過程與資料結構
  • Graphviz dot — 撰寫小腳本將資料轉為圖形

重點回顧#

  • 養成驗證關鍵表達式值的習慣,不要假設它們是對的
  • 設定持續監看來觀察表達式在演算法執行過程中的變化
  • 透過 local 變數追蹤函式的執行邏輯
  • 善用各種資料視覺化工具來理解複雜的資料結構