我正在尝试查看 Wireshark 的源代码以了解协议(protocol)分析,
但是我发现当我只使用gdb ./wireshark
时,当我按下Ctrl+C并设置一个断点,然后输入 C,进程消亡。我想知道 libtool 做了什么使 GDB 调试成为可能。
我已经读过 man libtool
,它说 libtool 是一个工具,可以很容易地使用各种 .a
或 .o
通过一个简单的界面,但我不知道使用 libtool 使 gdb wireshark
成为可能的关键是什么。
最佳答案
当您使用 libtool 构建程序时,它将处理在您的平台中使用共享库的所有困难和特殊性。
困难之一是调试,因为在调试时你想加载系统中没有安装的共享库(它们只是编译过的)。因此,当 libtool 构建可执行文件时,它会将其移至一个隐藏目录 (.libs
),并且通常会将一个脚本或同名的类似文件放在您可以看到的位置。该脚本将发挥所有魔力,使用正确的库运行正确的程序。
但是,显然您不能使用 gdb
调试脚本!因此,为了将正确的参数传递给 gdb
以便它能够使用正确的库调试正确的程序,您必须运行命令:
$ libtool --mode=execute gdb ./wireshark
您可以通过运行查看它的作用:
$ libtool --mode=execute echo ./wireshark
只是不要直接使用 .libs
中的文件:始终使用 libtool
或包装器脚本。
关于linux - 为什么我必须使用 libtool --mode==execute gdb wireshark 才能调试 wireshark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11048400/