You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用DDD调试CLANG/LLVM编译的程序?

如何使用DDD调试CLANG/LLVM编译的程序?

我之前也碰到过一模一样的问题——用Clang带-g编译的程序,DDD里死活看不到调试符号,换成GCC编译就一切正常,折腾了好一阵才摸清楚解决办法,给你捋捋:

先排除GDB本身的兼容问题

首先得确认不是GDB和Clang调试信息的兼容问题,毕竟DDD是基于GDB工作的。你可以先直接在命令行用GDB试试:

  • 输入命令:gdb ddd_test.e
  • 然后在GDB提示符里敲list或者break main,看看能不能正常显示代码、设置断点。
    • 如果GDB这里也看不到符号,那大概率是Clang生成的DWARF版本和系统GDB不兼容。Clang 16默认生成DWARF 5,但Rocky Linux 8的默认GDB版本(8.3.1)对DWARF 5的支持并不完善。这时候你编译的时候加个选项指定生成DWARF 4:
      clang -g -gdwarf-4 -O0 -o ddd_test.e ddd_test.c
      
      再用GDB和DDD试试,应该就能识别符号了。

强制DDD使用GDB调试

有时候DDD的自动调试器检测会出问题,即使默认说用GDB,实际交互可能有异常。你可以:

  • 启动时强制指定调试器:用这个命令启动DDD:
    ddd --debugger gdb ddd_test.e
    
  • 在DDD内部手动指定:如果已经打开了DDD,就通过菜单操作:
    1. 点击顶部菜单栏的Debug -> Debugger Options
    2. 在弹出的窗口里,把Inferior Debugger改成gdb(最好填绝对路径,比如/usr/bin/gdb,避免系统找不到)
    3. 点Apply之后,再通过File -> Open Program重新加载你的可执行文件

检查DDD版本(备选方案)

Rocky Linux 8的默认DDD版本可能比较老,对新的LLVM调试信息支持不足。如果前面的方法都不管用,你可以试试从源码编译一个新版的DDD,但这个步骤比较繁琐,优先试试前面的两种方法。

我当时就是靠加-gdwarf-4编译解决的问题,你按这个顺序试应该就能搞定~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 13:24:29