你好,游客 登录 注册 搜索
背景:
阅读新闻

Linux下可执行程序调试信息的分离及release程序的调试

[日期:2013-09-13] 来源:Linux社区  作者:Justlinux2010 [字体: ]

前两天在群里看到在讨论如何把debug版中的符号表加到release版本中,觉得这个非常有用,所以学习一下。

使用的工具是objcopy。
如果要生成单独的调试信息文件,命令如下:
objcopy –only-keep-debug foo foo.dbg
如果要去除调试信息(还可以使用strip命令),命令如下:
objcopy --only-keep-debug foo foo.dbg
如果要添加调试信息文件链接,命令如下:
objcopy --add-gnu-debuglink=foo.dbg foo
确认调试信息文件链接,命令如下:
objdump -s -j .gnu_debuglink foo
 
调试release程序前首先需要从debug版本中获取符号表信息,这个是通过objcopy这个利器,命令如下:
objcopy --only-keep-debug debug info.dbg
其中debug是带有符号表的可执行程序,info.dbg是保存符号表的文件。
在使用gdb调试release程序的时候,使用--symbol命令来加载前面生成的符号表,命令如下:
[root@CentOS_192 debug]#gdb -q --symbol=info.dbg --exec=release
Reading symbols from /root/debug/info.dbg...done.
(gdb) start
Temporary breakpoint 1 at 0x4004ef: file test.c, line 11.
Starting program: /root/debug/release
Temporary breakpoint 1, main () at test.c:11
11 return func();
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.80.el6.x86_64
(gdb)
其中--exec选项指定的release就是release版本的程序,这个程序原本是没有符号表信息的。

相关阅读:

Linux程序设计之套接字:UDP  http://www.linuxidc.com/Linux/2013-03/81306.htm

Linux程序设计-POSIX Threads  http://www.linuxidc.com/Linux/2012-10/73063.htm

Linux程序设计SELECT系统调用  http://www.linuxidc.com/Linux/2012-09/70259.htm

Linux程序分析工具介绍—ldd,nm  http://www.linuxidc.com/Linux/2012-07/66806.htm

linux
相关资讯       Linux程序调试  release调试 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款