gdb使用symbol文件调试程序
gdb使用symbol文件调试程序
来源 https://www.jianshu.com/p/7050a8f8841c
今天发现项目里的Makefile在debug和release版本之间有两行不一样的地方:
-
@objcopy --only-keep-debug bin/Release/Server bin/Release/Server.symbol
-
@objcopy --strip-debug bin/Release/Server
在这两行之前都是调用子目录里的Makefile来生成Server二进制文件,这两行我不知道是什么意思,于是man了一下objcopy,发现手册里是这样解释的:
objcopy - copy and translate object files.
--strip-debug
Do not copy debugging symbols or sections from the source file.
不从源文件中拷贝调试符号或段。
--only-keep-debug
Strip a file, removing contents of any sections that would not be stripped by --strip-debug and leaving the debugging sections intact.
这个正好与--strip-debug相反,是从文件中抽离--strip-debug所剩下的内容,也就是留下完整的调试信息。
这样处理之后,就将原来的Server文件一分为二,产生了一个没有调试信息的文件Server和一个只有调试信息的Server.symbol,Server文件明显变小了。
那么symbol文件如何使用呢?假如我们运行这个Server程序时因为某种原因宕掉了,需要用gdb来调试。因为Server本身不包含任何debug信息,这时候就需要加载symbol文件。
可以在gdb启动时制定symbol文件:
$ gdb -s Server.symbol -e Server -c core
也可以在gdb运行过程中加载:
-
$gdb Server core
-
#(这里中间略去gdb启动的信息)
-
(gdb) symbol-file Server.symbol
这样就可以用symbol文件来进行调试了。
============ End
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2021-04-30 卫星通信地面系统构成
2020-04-30 微信小程序基本环境
2020-04-30 微信小程序技术原理分析
2020-04-30 帮助链接
2019-04-30 Linux shellcode sample
2019-04-30 Linux Shell Bash 带有特殊含义的退出码
2019-04-30 编写 Bash 补全脚本