在 VSCode 中使用 LLDB 進行除錯

背景
以前聽說過 Debugger 工具,但實際上從來沒有使用過。
最近倒是因為資結重新開始碰 C++,但過程時常找不到 Bug 而煩躁,所以決定趁這個機會學一下 Debugger。
LLDB
相較於較常見的 GDB (From GNU Toolchain),這裡我使用的是 LLVM Toolchain 的 LLDB
理由是
- 目前 C++ 主要是使用 Macbook 在寫,而 MacOS 本身就有預設的 LLVM Toolchain,所以就使用 LLDB 了
不過聽老大說 macOS 自帶的 LLVM Toolchain 版本過於老舊且有被官方魔改過,
因此建議先用 brew 進行更新,
且安裝完要讓 Mac 更新 LLVM Toolchain 的 Link,不然仍然會被導到系統內建舊的 bin/brew link --force --overwrite llvm
(或者照 brew info 上寫的,在,在 shell 上加上兩個環境變數也可) - 也是聽老大說 CLI 比 GDB 好看,不過我沒有這個需求
此外,因為我很懶,所以不打算使用 CLI Commands,而是直接使用 VSCode 內建的 GUI Debug Interface
配置過程
- 寫好目標程式檔
main.cpp
- 使用
-g
選項編譯main.cpp
(這邊用 g++ 而非 clang++ 編譯,仍然可用於 LLDB)1
$ g++ -g main.cpp -o main
info
-g
選項是用來指示 g++ 生成專門給 Debugger 的調試訊息,包含比如:- 行數
- 變量的位置
- Program Counter 對應到的行數
- 在 VSCode 打開指令面板,輸入
>Debug: Add Configuration
新增launch.json
- 新增 LLDB 的 Configuration
- 修改
program
選項的值到執行檔:${workspaceFolder}/main
- 配置完成打開 VSCode 的 Debug 面板,可以在程式碼中新增斷點,即可嘗試執行 LLDB!
常用功能
引用老大的筆記內容
Breakpoints
中斷點
可以在BREAKPOINTS
欄位中加入如 Function Breakpoints,即在進入特定函數前中斷,
或者直接在特定程式碼行的前方加入中斷點
Next
單步執行,遇到函數不會進入
Step
單步執行,遇到函數會進入
Exception
LLDB 會幫我們自動接 Exception,顯示是哪裡發生什麼問題,免受 Segmentation Fault 之苦