Single-Stepping 的價值#

現代電腦每秒處理數十億條指令,要即時追蹤程式的詳細執行是不可能的。Debugger 的 single-step 功能讓你能一次執行一條程式語句(或機器指令),精準地找出程式執行序列中的錯誤,例如條件判斷走錯分支、迴圈執行次數不對等。

啟動 Single-Stepping#

不同工具的啟動方式:

  • Eclipse — 開啟 debug perspective(Window - Open Perspective - Debug),然後 Run - DebugF6 啟動,按 F5 逐步執行
  • Visual StudioDebug - Step Into 或直接按 F11
  • gdb — 以 gdb path/to/myprog 啟動,設定 breakpoint(如 break main),然後執行 step 指令

許多物件導向語言會在程式的 main 入口點之前就執行 static object 的建構子。

三種步進模式#

模式EclipseVisual Studiogdb用途
Step IntoF5F11step進入函式內部,查看詳細執行
Step OverF6F10next跳過函式,只看回傳結果
Step ReturnF7Shift-F11finish執行完目前函式,返回呼叫者

典型的除錯流程#

  1. Step over 大部分不相關的程式碼
  2. Step into 你懷疑有問題的函式
  3. 如果不小心進入了不需要看的函式,用 step return 快速跳出

發現錯過了問題怎麼辦#

有時你在 step over 之後才發現應該要 step into 某個函式。解決方法:

  • 在呼叫該函式的語句上設定一個 breakpoint
  • 重新執行或從 UI 重新啟動問題流程
  • 程式會停在你要 step into 的位置

也可以考慮使用 debugger 的 reverse debugging 功能(見 Item 31),省去重跑程式的時間。

重點回顧#

  • 透過 stepping through 程式碼來檢查執行序列與程式狀態
  • step over 跳過不相關的部分,加速除錯過程
  • 設定 breakpoint + 重跑 + step into 的方式,針對遺漏的問題函式進行深入除錯