suse linux gdb升级,SDB:如何为GDB安装Debuginfo包

openSUSE 使用过程中,有时候难免遇到需要使用 GDB 侦错调试的情况(比如你编译的软件出现了 Segmentation Fault 分页错误),这时就需要安装 *-debuginfo 调试信息包。本文教您如何安装调试信息包。

zypper 方法(简单)

openSUSE 下的 GDB 是做过 openSUSE 整合的,因此当您在 GDB 中输入 `run` 的时候,它会直接把缺失的调试信息符号和该符号所在软件包的安装方法都提示给您,如:

Missing separate debuginfo for /usr/lib64/YaST2/plugin/libpy2ag_xml.so.2

Try: zypper install -C "debuginfo(build-id)=ad78ac4282f6640c3c9ac2569dce742d4e22ca5b"

之所以说 zypper 方法比较简单,原因就在这里,您只需要:

开启 Debug 源,可以在“YaST 控制中心”-“软件源”-“添加”-“社区源”里选择,也可以直接用一条 zypper 命令添加:

然后直接复制那条命令、前面加 sudo 即可:

sudo zypper install -C "debuginfo(build-id)=ad78ac4282f6640c3c9ac2569dce742d4e22ca5b"

正在加载软件源数据...

正在读取已安装的软件包...

已安装过了 'yast2-xml-debuginfo',其提供了 'debuginfo(build-id) = ad78ac4282f6640c3c9ac2569dce742d4e22ca5b'。

正在解决软件包依赖关系...

无事可做。

YaST 方法(略显麻烦,但可视效果较好)

zypper 方法的缺点在于,它太“高效”了,高效到有时候你都不能理解“为什么要这么做”甚至不会注意“我究竟安装了哪些软件包”,对于控制欲太强的人可能不是什么好主意。所以我们也提供了 YaST 方法,这种方法比起 zypper 方法慢很多,但您能深入体会到 zypper 方法的来源,并且跟安装普通软件包的方法差不多。

首先还是添加 Debug 软件源。

zypper 方法注意的是 zypper 那行,这种方法我们要注意的是这行:

Missing separate debuginfo for /usr/lib64/YaST2/plugin/libpy2ag_xml.so.2

然后使用通用的 RPM 查询机制:

rpm -qf /usr/lib64/YaST2/plugin/libpy2ag_xml.so.2

yast2-xml-3.0.0-2.1.2.x86_64

也就是说,直接查询缺失调试信息的那个文件。因为在编译的时候,debuginfo 是从编译好的文件也就是 libpy2ag_xml.so.2 中自动 strip(剥离)出来的(因此知道文件也就知道了要哪个调试信息包),甚至连包的属性都是标准的,比如所有的 debuginfo 调试信息包都提供了 build-id,也就是 debuginfo(build-id)=ad78ac4282f6640c3c9ac2569dce742d4e22ca5b,所以你用 zypper 才能直接定位到这个软件包。

现在你知道了缺失调试信息的文件所在的软件包叫 yast2-xml,那么这个软件包对应的调试信息包就叫做 yast2-xml-debuginfo,同时也是缺失调试信息的文件的调试信息所在的软件包。用 YaST2 软件管理直接安装这个软件包即可。

常见问题

CRC Mismatch

有时候您会遇到这个提示:

warning: the debug information found in "/usr/lib/debug//usr/lib64/libgvfscommon.so.0.0.0.debug" does not match "/usr/lib64/libgvfscommon.so.0" (CRC mismatch).

warning: the debug information found in "/usr/lib/debug/usr/lib64/libgvfscommon.so.0.0.0.debug" does not match "/usr/lib64/libgvfscommon.so.0" (CRC mismatch).

这是因为你安装的 debuginfo 包跟你的主包的版本号不一致造成的,一般情况下把主包升级一下即可。

No module named backtrace

有时候您会遇到这个错误:

Traceback (most recent call last):

File "/usr/share/gdb/auto-load/usr/lib64/libgobject-2.0.so.0.3800.1-gdb.py", line 9, in

from gobject import register

File "/usr/share/glib-2.0/gdb/gobject.py", line 3, in

import gdb.backtrace

ImportError: No module named backtrace

这是个不用理会的错误,对结果没有影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值