我试图查看 Wireshark 的源代码以了解协议分析,但我发现当我只是使用gdb ./wireshark
时,当我按Ctrl+C并设置断点,然后键入C时,进程就死了。我想知道 libtool 做了什么来使 GDB 调试成为可能。
我已经读过它说 libtool 是一种工具,可以通过简单的界面man libtool
轻松使用各种工具,但我不知道使用 libtool 的关键是什么。.a
.o
gdb wireshark
当您使用 libtool 构建程序时,它将处理在您的平台中使用共享库的所有困难和特殊性。
困难之一是调试,因为在调试时您想加载系统中未安装的共享库(它们只是编译)。因此,当 libtool 构建可执行文件时,它会将其移动到隐藏目录 ( .libs
) 中,并且通常会在您可以看到的地方放置一个同名的脚本或类似文件。该脚本将尽一切努力使用正确的库运行正确的程序。
但是,显然您不能使用gdb
! 因此,为了传递正确的参数以gdb
使其能够使用正确的库调试正确的程序,您必须运行以下命令:
$ libtool --mode=execute gdb ./wireshark
您可以通过运行查看它的作用:
$ libtool --mode=execute echo ./wireshark
只是不要.libs
直接使用文件:使用 alwayslibtool
或包装脚本。