为什么我必须使用libtool --mode ==执行gdb wireshark才能调试wireshark

时间:2012-06-15 09:51:13

标签: linux gdb wireshark libtool

我正在尝试查看Wireshark的源代码以了解协议分析, 但我发现当我只使用gdb ./wireshark时,按 Ctrl + C 并设置断点,然后输入 C ,这个过程就死了。我想知道libtool可以使GDB调试成为可能。

我已经阅读了man libtool,它说libtool是一个工具,可以通过简单的界面轻松使用各种.a.o,但我不知道关键是使用libtool使gdb wireshark成为可能。

1 个答案:

答案 0 :(得分:5)

当您使用libtool构建程序时,它将处理在您的平台中使用共享库的所有困难和特殊情况。

其中一个难点是调试,因为在调试时你想加载系统中安装的共享库(它们只是被编译)。因此,当libtool构建可执行文件时,它会将其移动到隐藏目录(.libs)中,并且通常会在您可以看到它的位置放置一个具有相同名称的脚本或类似文件。这个脚本将使用正确的库运行正确的程序。

但是,显然你无法使用gdb调试脚本!因此,为了将正确的参数传递给gdb,以便能够使用正确的库调试正确的程序,您必须运行命令:

$ libtool --mode=execute gdb ./wireshark

您可以通过运行来查看它的作用:

$ libtool --mode=execute echo ./wireshark

不要直接使用.libs中的文件:始终使用libtool或包装脚本。