当前位置: 首页 > news >正文

(三) Trae 调试C++ 基本概念

调试C++基本概念

  • 一、调试基础概念
    • 1.1 调试信息格式
    • 1.2 DWARF格式和PDB格式生成(图解)
    • 1.3.典型工具链和调试信息
  • 二、各工具链深度解析
    • 1. Clang++ 与 G++ 的 DWARF 差异
  • 三 调试工具
    • 3.1 调试工具
    • 3.2 调试插件(Trae)

一、调试基础概念

1.1 调试信息格式

格式类型适用系统存在形式
DWARFUnix-like 系统标准格式嵌入可执行exe文件
(或独立.dwo文件 )
PDBWindows 专有格式独立的 .pdb文件

1.2 DWARF格式和PDB格式生成(图解)

编译时生成
Linux/macOS
编:clang++ g++.exe
链:lld.exe
链:ld.exe
Windows 编:cl.exe clang-cl.exe
链:link.exe
源代码
调试信息
DWARF格式
PDB格式
DWARF集成格式<在exe内部>
.PDB文件格式
调试器=调试文件
LLDB=DWARF-5
GDB=DWARF-4
调试器=调试文件
WinDbg=pdb文件
CDB=pdb文件

1.3.典型工具链和调试信息

c++编译工具链有:

  1. MSVC(MsBuild.exe cl.exe link.exe)
  2. 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)
  3. MinGw (make.exe g++.exe ld.exe)

C++工具链表格:

工具链编译器链接器调试信息典型调试器
MSVCcl.exelink.exe.pdb文件windbg.exe / CDB.exe / vs的IDE
LLVMclang-cllink.exe.pdb 文件WinDbg.exe
LLVMclang++lld.exeDWARF-5
(内嵌入exe)
LLDB.exe
LLVMclang++ld.exe未实践过
MinGwg++ld.exeDWARF-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下载安装MinGwg++.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 差异

g++.exe ld.exe
GIMPLE
GCC前端
Gold/BFD链接器
DWARF-4
clang++.exe lld.exe
LLVM IR
Clang前端
LLD链接器
DWARF-5

关键区别:
版本差异:LLVM 默认 DWARF-5(更紧凑),GCC 默认 DWARF-4
模板调试:Clang 保留完整实例化链,GCC 可能丢失中间层
跨平台性:LLVM 生成格式在各平台一致性更好

三 调试工具

3.1 调试工具

工具链调试格式调试器
MSVCpdbwindbg.exe
CBD(console debuger)
vs-IDE
LLVMDWARF-5lldb.exe
MinGwDWARF-4lld.exe

3.2 调试插件(Trae)

  1. 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
  2. CodeLLDB (vadimcn)

其中ColdeLLDB是用来调试LLVM原生的lldb.exe连接出来的程序.


http://www.mrgr.cn/news/100230.html

相关文章:

  • 开发并发布一个属于自己的包(npm)
  • fps项目总结:生成武器子弹丧尸攻击
  • 从FP32到BF16,再到混合精度的全景解析
  • TortoiseGit使用图解
  • 《Learning Langchain》阅读笔记8-RAG(4)在vector store中存储embbdings
  • 如何使用URDF搭建双臂UR移动机器人,并在RViz中可视化
  • 【MySQL】MySQL索引与事务
  • 【计算机视觉】CV实战项目 - 基于YOLOv5的人脸检测与关键点定位系统深度解析
  • 张 LLM提示词拓展16中方式
  • 【中级软件设计师】函数调用 —— 传值调用和传地址调用 (附软考真题)
  • 【计算机视觉】CV实践项目- 基于PaddleSeg的遥感建筑变化检测全解析:从U-Net 3+原理到工程实践
  • Python-Agent调用多个Server-FastAPI版本
  • 小刚说C语言刷题——1565成绩(score)
  • Lesar: 面向 Lustre/Scade 语言的形式化模型检测工具
  • Nginx 反向代理,啥是“反向代理“啊,为啥叫“反向“代理?而不叫“正向”代理?
  • 语音合成之五语音合成中的“一对多”问题主流模型解决方案分析
  • 新!在 podman-machine-default 中安装 CUDA、cuDNN、Anaconda、PyTorch 等并验证安装
  • MiniMind模型的web交互功能初试
  • C# 综合示例 库存管理系统7 主界面(FormMain)
  • Shell脚本-for循环应用案例