clang+llvm多进程gdb调试

本文介绍了如何在clang+llvm项目中,通过gdb进行多进程调试,包括命令行gdb的使用,父进程和子进程的调试方法,以及在vscode中设置.inc文件高亮。

前言

在学习新增llvm的优化pass时,需要跟踪clang及llvm的调用栈。然而llvm通过posix_spawn()创建了新进程,这使得gdb调试必须有一定的技巧了。

1. 命令行gdb

以下命令通过clang调用新增优化pass(指令替换),将simple.c文件中的sum函数替换掉:

clang -flegacy-pass-manager -mllvm -sub -mllvm -sub_loop=1 -mllvm -sub_name=sum mvc.o simple.c -o simple

单步调试的命令为:

gdb --args clang -flegacy-pass-manager 
### 使用 CMake 进行 Clang 调试的方法 为了有效地使用 CMake 对 Clang 进行调试,可以遵循以下方法: #### 设置合适的编译选项 当配置项目时,在 `CMakeLists.txt` 文件中指定所需的调试标志。通常情况下,这涉及到设置 `-g` 编译器标记来启用调试信息的生成。 ```cmake set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") ``` 此命令会向所有的 C++ 编译操作添加 `-g` 参数[^4]。 #### 配置构建类型 通过设定 `CMAKE_BUILD_TYPE` 变量为 `Debug` 来确保优化被禁用并且启用了额外的运行时检查。这样可以帮助发现潜在的问题并简化追踪错误的过程。 ```bash cmake -DCMAKE_BUILD_TYPE=Debug .. ``` 这条指令告诉 CMake 创建一个适合于开发和调试环境下的目标文件结构[^3]。 #### 构建与测试 完成上述配置之后,执行常规的构建过程即可获得带有完整符号表和其他辅助数据的对象文件以及可执行程序。对于基于 LLVM 的工具链来说,这意味着能够利用像 LLDB 或者 GDB 这样的强大调试器来进行交互式的故障排除工作。 一旦遇到问题,则可以在源码编辑器内启动调试会话,并逐步分析代码逻辑直至定位到具体位置为止;也可以直接附加至正在运行的应用进程上进行实时监控。 #### 头文件处理注意事项 如果项目中有仅由头文件构成的库组件存在的话,那么需要注意这些资源不会重复包含不必要的路径前缀,以免引起链接阶段可能出现的相关警告或报错情况发生[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值