GDB无法映射符号文件至剥离符号的可执行文件,无法设断点求助
解决GDB无法加载分离调试符号的问题
你的操作错误出在调试符号提取环节:strip --strip-debug a.out -o a.out.debug并非提取符号,而是移除a.out中的调试符号,将剥离后的无符号文件输出到a.out.debug。后续又执行strip a.out剥离原文件符号,最终导致两个文件都没有调试信息,GDB自然无法识别main函数。
正确的调试符号分离流程
- 编译生成带调试符号的可执行文件:
gcc -g file.c - 提取调试符号到单独文件:
objcopy --only-keep-debug a.out a.out.debug - 剥离原可执行文件的调试符号:
strip --strip-debug a.out - 建立可执行文件与符号文件的关联:
objcopy --add-gnu-debuglink=a.out.debug a.out
验证操作
完成上述步骤后,直接启动GDB:
gdb a.out
GDB会自动加载同目录下的a.out.debug符号文件,此时执行b main即可正常设置断点。
若符号文件不在可执行文件同目录,可通过set debug-file-directory /path/to/symbols指定目录,但需确保符号文件名与可执行文件的关联信息匹配。
内容的提问来源于stack exchange,提问作者Franc
相关产品推荐
相关产品推荐

