我使用gdb (ddd)来调试我的C/C++项目。
每当断言失败时,我可以像正常一样调试程序,并回溯到失败的断言,但首先我会得到一个恼人的弹出窗口

我假设raise.c定义了assert,但是ddd在我的主目录中查找,而不是在/usr/...或类似的地方查找。
我可能安装了调试包,也可能没有安装(我在Ubuntu上),但主要的问题是:为什么gdb要在$HOME中寻找这个源代码?
发布于 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上):
<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/signalUbuntu没有在基本发行版中发布源代码,所以您的系统在/build/glibc-Cl5G7W/glibc-2.23中没有任何glibc源代码,所以gdb根据它的规则raise.c在其他一些目录中查找(没有成功)gdb,最后放弃了,并显示了错误消息
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。
https://stackoverflow.com/questions/48732504
复制相似问题