首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gdb/ddd在调试assert()时找不到rise.c,它正在我的主目录中查找

gdb/ddd在调试assert()时找不到rise.c,它正在我的主目录中查找
EN

Stack Overflow用户
提问于 2018-02-11 22:24:40
回答 1查看 4.3K关注 0票数 3

我使用gdb (ddd)来调试我的C/C++项目。

每当断言失败时,我可以像正常一样调试程序,并回溯到失败的断言,但首先我会得到一个恼人的弹出窗口

我假设raise.c定义了assert,但是ddd在我的主目录中查找,而不是在/usr/...或类似的地方查找。

我可能安装了调试包,也可能没有安装(我在Ubuntu上),但主要的问题是:为什么gdb要在$HOME中寻找这个源代码?

EN

回答 1

Stack Overflow用户

发布于 2018-02-13 01:29:43

由于系统上安装了glibc debuginfo包libc6-dbg,因此gdb将在/usr/lib/debug/lib/x86_64-linux-gnu/libc-2.23.so中查找指令地址,以将指令地址映射到源文件名和行号。

该文件中包含__GI_raise信息的部分具有以下属性,这些属性指示可以在何处找到源代码(在Ubuntu16.04上):

代码语言:javascript
复制
<0><688bd>: Abbrev Number: 1 (DW_TAG_compile_unit)
    <688c3>   DW_AT_name        : (indirect string, offset: 0x9137): ../sysdeps/unix/sysv/linux/raise.c
    <688c7>   DW_AT_comp_dir    : (indirect string, offset: 0x9010): /build/glibc-Cl5G7W/glibc-2.23/signal

Ubuntu没有在基本发行版中发布源代码,所以您的系统在/build/glibc-Cl5G7W/glibc-2.23中没有任何glibc源代码,所以gdb根据它的规则raise.c在其他一些目录中查找(没有成功)gdb,最后放弃了,并显示了错误消息

代码语言:javascript
复制
54  ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.

然后,ddd调用SourceView::full_path("../sysdeps/unix/sysv/linux/raise.c")来规范化路径名,并考虑到您的工作目录,并在您的问题中显示错误对话框。

关于如何在Ubuntu上安装glibc源码,请参阅GDB complaining about missing raise.c

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48732504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档