1

当我尝试使用 gdb 运行以下代码时,我有 c/gtk+ 应用程序和 GList 填充了三个元素:

if (g_list_length(mw->img_list) > 0)
   printf(">0");
else
   printf("<0");

我明白:

程序收到信号 SIGSEGV,分段错误。[切换到线程 0xb73c4700 (LWP 7936)] IA__g_list_length (list=0x6e6920) at glist.c:767 767 glist.c:没有这样的文件或目录。在 glist.c 中

它是什么?

谢谢你。

4

3 回答 3

2

这是 glib 中的一个崩溃,可能是因为你给它一个指向列表的错误指针。调试器尝试加载源代码以向您显示崩溃的位置,但找不到它(可能是因为您只是链接到 lib,甚至没有手边的源代码)。

使用 gdbup命令在调用堆栈中向上步进,直到到达您的代码,并检查您传递给g_list_length()函数的参数。

于 2010-06-10T14:54:16.167 回答
2

您的调试器正在尝试查找 GList 的源代码以帮助您调试问题。通常,您不会安装源代码。您需要安装调试包或某种源代码。

如果你在 Fedora 系统上,debuginfo-install glib2会这样做。在 Debian 或 Ubuntu 上,可能有一个用于此的软件包,可能以-dbg?

于 2010-06-10T15:05:08.593 回答
0

看起来好像它试图找到不存在的东西(在你的硬盘上)。这就是所有的代码吗?

于 2010-06-10T14:51:37.377 回答