Chinaunix首页 | 论坛 | 博客
  • 博客访问: 378871
  • 博文数量: 124
  • 博客积分: 30
  • 博客等级: 民兵
  • 技术积分: 11
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-29 22:22
文章分类

全部博文(124)

文章存档

2016年(8)

2015年(52)

2014年(53)

2013年(11)

分类: LINUX

2013-12-04 23:32:57

原文地址:rpmbuild, debuginfo, gdb ... 作者:slimzhao

这几个东西放在一块, 是在linux通过rpm包发布软件经常会碰到的一个问题:
rpm 二进制包给客户使用, 但又希望一旦出了问题需要调试时可以用gdb调试, VC的策略早就把符号信息独立到.pdb文件中去了.
gcc 在编译时, 仍是把调试信息写到最终的可执行文件本身中去. 表现为 .dynsym  .symtab这样的section.

但rpmbuild从RedHat 9开始, 可以把二进制文件中的调试信息摘出来放到一个单独的文件中了, 相应地, gdb可以load这样的文件来辅助调试, 具体命令是

gdb stripped_binary

(gdb) symbol-file stripped_binary.debug -readnow

说这几个东西, 是因为经常会搞错.

debuginfo是我对rpmbuild生成的专司调试目的的rpm包的称呼, 名字一般是

software-debuginfo-1.0.2-3.rpm
其中包含: 所有的源代码, 为每个二进制文件抽取出来的对应的.debug文件.

rpmbuild能生成正确的debuginfo, 取决于几个因素:
1. Makefile中的编译命令命令带-g, 也就是说, 二进制文件中必需得先有这样的调试信息才行
2. install这样的目标必需不带 -s 参数, 否则, 前面即使用了-g, 也会被删掉, 白搭了
3. gcc 命令不能含有-s, 这个一样是strip 调试信息的.

我碰到过的情况: 1保证了, 2没有, 生成的debuginfo包是空的, 没有一个文件.

可能你会担心, 有了1和2, 那怎么保证二进制rpm包本身没有包括调试信息呢, rpmbuild会把其中的调试信息删除, 而且它并不是通过 strip命令.

install -s 的实现是通过调用 strip命令, 这一点可以通过把strip命令偷换掉观察其结果得知.

健康和软件发布一定保证能追溯到相应的调试信息和源代码.

关于这个问题, 解决过程中查了一些资料:



rpmbuild has a new feature in that it will automatically create a 
-debuginfo package when you (re)build a package. This is documented in
the RELEASE-NOTES:
--------------------------------------------------------------------------------------------------
o GDB has been enhanced to allow debugging information for applications
to be read from separate files. This makes it possible to extract
debugging information from binaries and place them in a supplemental
package. During the development of Red Hat Linux 9,
"debuginfo" packages were generated for nearly every package by
implementing special RPM macros. By default, the RPM macro
configuration in Red Hat Linux 9 generates "debuginfo"
packages. If you are building packages and do not want to generate
"debuginfo" packages, add the following to your ~/.rpmmacros file:

%define debug_package %{nil}
-----------------------------------------------------------------------------------------------------

However, this is not exactly correct. To disable this feature you need to add
the following to ~/.rpmmacros:

%debug_package %{nil}

rpmbuild 是通过 -tb, 还是 -bb, 对debuginfo包没有影响.

-ta 的all, 也不决定debuginfo包的生成与否, 而是会生成额外的src.rpm
阅读(2668) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~