如何在调试时查看外部库代码

时间:2010-03-24 20:19:05

标签: debugging gdb gtk

首先......这是我在这个地方的消息#1,所以......请和我好好相处;)

我刚开始研究Gnome应用程序/库,我发现调试器是一种很好的学习方式,因为看到代码运行有助于理解程序的结构。

但我有一个问题。例如,调试gnome-panel我发现很多外部函数调用(基本上是GTK +函数),虽然假装看到所有函数应用程序的所有代码,比如这个调用会很疯狂,但是有很多东西会是看到在行动非常有趣。问题是调试器没有加载那些库的代码,它不能显示给我 - 大多数它显示执行所在的行号。

我正在使用Nemiver,并且当它尝试在外部函数中输入时,它声称因为找不到它应该在某个地方的文件。例如,尝试输入gtk_window_set_default_icon_name,它会尝试加载 /build/buildd/gtk+2.0-2.16.1/gtk/gtkwindow.c ,并调用XSetIOErrorHandler, ../ .. /src/ErrHndlr.c

所以现在我认为我做错了什么...为什么Nevimer在这些地方寻找那些源文件?

我的系统甚至没有/ build / buildd /文件夹......我不知道我做错了什么,或者我需要安装somethig或什么。

有什么建议吗?你如何调试这种应用程序?

最好的问候和非常感谢您的时间 - 如果我的英语不好,请原谅我。

2 个答案:

答案 0 :(得分:0)

调试器执行源文件中的行,这些行在编译时(启用调试符号)生成二进制文件。对于外部库,它们作为单独的entites(目标文件)提供,并与当前代码链接以生成可执行文件。

如果调试器可以迭代源文件,那么就会生成与库相对应的源文件,这会破坏许多专业合同。所以,我不确定是否可能。

但是,您所讨论的GTK库是开源的,并且API调用已记录在here。因此,IMO可以更好地节省时间,了解对库的特定函数调用的作用,并与其余代码一起使用。

答案 1 :(得分:0)

嗯......问题比我想象的更简单。

因为Nemiver试图访问一些不存在的文件夹,我认为创建它们是一种选择,它是xDDDDD。

Nemiver可以选择在文件中加载源文件 - >开源文件 [我真的不知道这是否正是选项的名称,因为我看到的是西班牙语程序],当你选择它时,一个对话框是打开的,其中一个主要选项是从您要查找源文件的位置中选择:从可执行文件或文件系统...我从可执行文件中选择 然后我看到了奇怪的路径使用 / build 。然后我假设可执行文件知道用于构建它的源文件在哪里...

好吧,总结一下:我对Nemiver关于源路径的假设感到满意,现在一切都在自动运行。

例如:由于Nemiver告诉我GTK +文件位于 /build/buildd/gtk+2.0-2.16.1/gtk / 我已创建 / build / buildd 我已经下载了gtk +(2.16.1)。然后我在buildd中使用名称gtk + 2.0-2.16.1对其进行解压缩,现在当我尝试输入GTK +函数时,Nemiver会自动加载相应的文件并逐步显示它的执行情况:)