已添加-g选项仍收到dbx警告:'main'无调试信息
解决dbx提示"main has no debugger info"的问题
我在使用dbx调试时遇到以下警告,尽管已经添加了-g编译选项:
dbx: warning: 'main' has no debugger info -- will trigger on first instruction
我已经尝试了两种添加-g选项的方式,但问题依旧:
- 通过包含
-g的Makefile编译:
Makefile片段:
执行命令:DEBUG=-gmake -f program.mak; ./program; - 直接命令行编译:
cc -g program.o program.c ./program
根据AIX平台dbx的调试规则,编译生成可执行文件时必须通过cc的-g选项生成符号表,否则dbx无法获取调试信息。另外需注意:
- 若编译时未加
-g,或用strip命令移除了XCOFF文件中的符号引用,会直接导致dbx的符号功能受限 - 用于调试的可执行文件不能使用
-O优化选项,代码优化会重排指令、破坏调试数据,完全丧失调试价值
可能的问题及解决步骤
Makefile中
DEBUG=-g未实际生效
检查Makefile的编译规则,确认DEBUG变量是否被正确传入cc的编译参数。例如需要确保编译规则类似:program: program.c cc $(DEBUG) -o program program.c仅定义
DEBUG=-g但未在编译指令中引用,等于没加-g选项。命令行编译参数顺序/旧目标文件干扰
你使用cc -g program.o program.c编译时,program.o可能是之前未加-g生成的旧目标文件,链接时旧的无调试信息的文件会覆盖新编译的代码。正确操作是先清理旧文件,重新编译所有源文件:rm -f program.o program cc -g -o program program.c或者分步编译生成带调试信息的目标文件再链接:
rm -f program.o program cc -g -c program.c # 生成带调试信息的program.o cc -g -o program program.o可执行文件被意外strip
检查编译后的可执行文件是否被strip处理过,执行以下命令查看符号表状态:nm program | grep main如果没有输出
main相关符号,说明符号表已被移除,需要重新编译并确保未执行strip命令。无意中启用了
-O优化
检查Makefile或编译命令中是否存在-O相关选项,若有则立即移除,确保编译时仅使用-g选项,避免优化破坏调试数据。
内容的提问来源于stack exchange,提问作者noobprogrammer1987
相关产品推荐
相关产品推荐

