我有c / gtk +应用程序和GList填充了三个元素,当我尝试使用gdb运行以下代码时:
if (g_list_length(mw->img_list) > 0)
printf(">0");
else
printf("<0");
我明白了:
编程接收信号SIGSEGV,分段故障。 [切换到线程0xb73c4700(LWP 7936)] 在glist.c:767的IA__g_list_length(list = 0x6e6920) 767 glist.c:没有这样的文件或目录。 在glist.c
这是什么?
谢谢。
答案 0 :(得分:2)
这是glib中的崩溃,可能是因为你把一个坏指针交给了一个列表。调试器尝试加载源代码以显示它崩溃的位置,但找不到它(可能是因为你只是链接到lib,甚至没有源代码)。
使用gdb up
命令在调用堆栈中向上步,直到找到代码,然后检查传递给g_list_length()
函数的参数。
答案 1 :(得分:2)
您的调试器正在尝试查找GList的源代码,以帮助您调试问题。通常,您不会安装源。您需要安装调试包或某种源。
如果您使用的是Fedora系统,debuginfo-install glib2
将会这样做。在Debian或Ubuntu上,可能有一个包,可能以-dbg
结尾?
答案 2 :(得分:0)
看起来它试图找到一些不存在的东西(在你的硬盘上)。这就是所有的代码吗?