調試C++基本概念
- 一、調試基礎概念
- 1.1 調試信息格式
- 1.2 DWARF格式和PDB格式生成(圖解)
- 1.3.典型工具鏈和調試信息
- 二、各工具鏈深度解析
- 1. Clang++ 與 G++ 的 DWARF 差異
- 三 調試工具
- 3.1 調試工具
- 3.2 調試插件(Trae)
一、調試基礎概念
1.1 調試信息格式
格式類型 | 適用系統 | 存在形式 |
---|---|---|
DWARF | Unix-like 系統標準格式 | 嵌入可執行exe文件 (或獨立.dwo文件 ) |
PDB | Windows 專有格式 | 獨立的 .pdb文件 |
1.2 DWARF格式和PDB格式生成(圖解)
1.3.典型工具鏈和調試信息
c++編譯工具鏈有:
- MSVC(MsBuild.exe cl.exe link.exe)
- LLVM (三條線)
2.1 支持msvc的 (ninja.exe clang-cl.exe + MSVC:link.exe)
2.2 支持LLVM原生的(ninja.exe clang++.exe LLVM:lld.exe)
2.2 支持MinGw的(ninja.exe clang++.exe + MinGw:ld.exe) - MinGw (make.exe g++.exe ld.exe)
C++工具鏈表格:
工具鏈 | 編譯器 | 鏈接器 | 調試信息 | 典型調試器 |
---|---|---|---|---|
MSVC | cl.exe | link.exe | .pdb文件 | windbg.exe / CDB.exe / vs的IDE |
LLVM | clang-cl | link.exe | .pdb 文件 | WinDbg.exe |
LLVM | clang++ | lld.exe | DWARF-5 (內嵌入exe) | LLDB.exe |
LLVM | clang++ | ld.exe | 未實踐過 | |
MinGw | g++ | ld.exe | DWARF-4(2,3) (內嵌如exe) | GDB.exe |
補充:工具鏈來源
編譯工具鏈 | 來源 | 內容 |
---|---|---|
MSVC | 安裝visual studio (vs_installer.exe 安裝時,選擇編譯安裝c++) | cl.exe link.exe windbg.exe等 |
LLVM | 下載安裝:LLVM包 | clang++.exe lld.exe clang-cl.exe |
MinGw | 下載安裝MinGw | g++.exe ld.exe等 |
簡單補一句:
clang-cl.exe 就是用來快速支持替換cl.exe的,他支持cl.exe的大部分命令行參數
基本可以認為是如此使用
cl.exe main.cpp -o mian.exe
clang-cl.exe main.cpp -o main.exe
二、各工具鏈深度解析
1. Clang++ 與 G++ 的 DWARF 差異
關鍵區別:
版本差異:LLVM 默認 DWARF-5(更緊湊),GCC 默認 DWARF-4
模板調試:Clang 保留完整實例化鏈,GCC 可能丟失中間層
跨平臺性:LLVM 生成格式在各平臺一致性更好
三 調試工具
3.1 調試工具
工具鏈 | 調試格式 | 調試器 |
---|---|---|
MSVC | pdb | windbg.exe CBD(console debuger) vs-IDE |
LLVM | DWARF-5 | lldb.exe |
MinGw | DWARF-4 | lld.exe |
3.2 調試插件(Trae)
- Extension Pack for C/C++(KylinIdeTeam) 已經包含:
1.1 kylin Clangd
1.2 C/C++ Debug(gdb) – 因為這個,所以下載較慢
1.3 CMake Intelli
1.4 CMake Tool(fork)
1.5 Kylin Native Debug - CodeLLDB (vadimcn)
其中ColdeLLDB是用來調試LLVM原生的lldb.exe連接出來的程序.