Arch Linux环境下clang编译C程序无法生成调试符号问题求助
原因分析
- Clang 12.x 在Arch Linux发行版中默认启用DWARF 5版本作为调试符号生成格式,而对应版本的LLDB 12.x对DWARF 5的适配存在兼容性缺陷,无法正确解析该格式的调试信息。
- GCC 11.x默认生成DWARF 4版本的调试符号,GDB 11.x对DWARF 4和DWARF 5都有完整支持,因此可以正常读取调试符号。
- 可执行
clang -### -g a.c命令查看Clang默认的调试符号版本参数,确认是否默认使用-gdwarf-5。
解决方案
- 临时指定生成兼容版本的调试符号
编译时添加-gdwarf-4参数强制生成DWARF 4格式的调试符号,命令如下:
clang -g -gdwarf-4 a.c
编译完成后用LLDB加载即可正常查看代码、设置断点。
- 升级LLVM工具链
LLDB从13版本开始完整支持DWARF 5格式,直接将Arch源中的clang、lldb升级到最新版本即可原生解决兼容性问题,升级命令:
sudo pacman -Syu clang lldb
升级后不需要添加额外参数,直接执行clang -g a.c生成的可执行文件即可被LLDB正常识别调试符号。
- 配置永久别名(可选)
如果暂时不想升级工具链,可以在Shell配置文件(如~/.bashrc、~/.zshrc)中添加别名,自动附加兼容参数:
alias clang='clang -gdwarf-4'
配置生效后直接执行clang -g a.c即可生成兼容的调试符号。
内容的提问来源于stack exchange,提问作者Joey
相关产品推荐
相关产品推荐

