iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
自我挑戰組

玩程式新手村 – C和Python系列 第 9

第9天- Debug: 怎樣除蟲

  • 分享至 

  • xImage
  •  

如何找到 C程式的錯誤?

程式的錯誤可以簡單的分兩類:
一個是語法的錯誤,C 語言的編譯器 (complier) gcc 會幫我們在編譯時,找出語法的錯誤。
另一個是執行結果的錯誤,這就要使用 C 語言的偵錯工具 (debugger) gdb 來幫助我們發現哪裡可能是錯誤的原因。

  • C語言的偵錯工具 gdb 在安裝的 MinGW-w64 時,就已經同時安裝好。
  • 已安裝的 C/C++ 延伸模組會在 gcc 編譯時,加入 -g 參數。這是用於加入除錯資訊,供 gdb 進行除錯。

如何開始偵錯?

  • 先在可能錯誤,或想開始釐清問題的程式碼行列,點選行號左邊的空白處,設定「中斷點」。或是在當下程式碼行列,按下快捷鍵 F9 去設定或取消「中斷點」。

  • 然後開始編譯、建置和執行:

    • 在 VS Code 編輯器的右上方有個三角形圖示及右側小 v 圖示,點選小 v 圖示展開的選單「偵錯 C/C++ 檔案」。
      可以參考第七天的文章 “編譯並執行C語言程式”的說明。
      如果 .vscode 資料夾內還沒有建立設定檔 tasks.json ,C/C++延伸模組會詢問你「選取偵錯設定」,你就選取「C/C++: gcc.exe 建置及偵錯使用中的檔案 preLaunchTask: … 」,它會自動建立設定檔 tasks.json
      https://ithelp.ithome.com.tw/upload/images/20230918/20162281ZYIwfRZrJ7.png

    • 或是選取指令選單 執行 > 啟動偵錯

    • 或按下快捷鍵 F5
      同樣的,如果 .vscode 資料夾內還沒有建立設定檔 tasks.json ,就先會詢問你「選取偵錯工具」,你就選取「C++ (GDB/LLDB)」,然後再選取組態「C/C++: gcc.exe 建置及偵錯使用中的檔案 preLaunchTask: … 」
      https://ithelp.ithome.com.tw/upload/images/20230918/20162281MEamDx183j.png
      https://ithelp.ithome.com.tw/upload/images/20230918/20162281SgqW0whkH2.png

    當下的C語言程式檔案就會在VS Code 終端機內開始建置和執行偵錯。

甚麼是「執行與偵錯」的組態設定?

對於新手而言,VS Code 的偵錯組態設定 (debug configuration) 很複雜,除了在先前的設定檔 tasks.json 外,另外還要產生另一設定檔  launch.json  。

但慶幸的是,當在「執行與偵錯 」偵錯啟始頁面點選「建立 launch.json 檔案」, VS Code 會自動產生基本的設定檔  launch.json  。要注意的是,建立前它會詢問要選用甚麼偵錯工具 (debugger),請選擇 「C++(GDB/LLDB)」。如果想了解更詳細,請參考傳送門資料。

而我們前面介紹開始偵錯的步驟,沒有選擇去建立設定檔  launch.json  ,在「執行與偵錯」就以「沒有組態」的形式開始偵錯,我認為基本上對於新手開始入門就足夠了。

如何操作偵錯介面?

  • 開始偵錯時, VS Code 的「主要側邊欄」就會自動切換成「執行與偵錯 (Run and Debug)」,它包含四個方塊:

    • 變數
    • 監看
    • 呼叫堆疊
    • 中斷點
  • 同時會顯示程式執行控制面板
    https://ithelp.ithome.com.tw/upload/images/20230918/20162281tUl2iFn9Uw.png
    前三個常用按鍵是:

    • Continue (繼續)
      繼續執行到下一個中斷點。快捷鍵 F5
    • Step Over (逐步執行,不進入函式)
      執行下一行程式碼。快捷鍵 F10
    • Step Into (逐步執行,進入函式)
      如果下一行程式碼是函式,就執行函式第一行程式碼。快捷鍵 F11

    下面傳送門的文章有提供偵錯介面的詳細介紹。

Debug 的傳送門

🌐 Debugging in Visual Studio Code
🌐 檢查 Visual Studio Code 偵錯工具介面 - Training | Microsoft Learn


上一篇
第8天- Code Runner學習過程
下一篇
第10天- Python 登場
系列文
玩程式新手村 – C和Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言