为什么必须使用libtool --mode=execute gdb wireshark来进行Wireshark的调试?

5
我正在尝试查看Wireshark的源代码以了解协议分析,但我发现当我只使用时,当我按+并设置断点,然后输入时,进程会死亡。我想知道libtool是如何使GDB调试成为可能的。
我已经阅读了,它说libtool是一个工具,通过简单的界面使使用各种.a或.o文件变得容易,但我不知道使用libtool使成为可能的关键是什么。
1个回答

5
当您使用libtool构建程序时,它将处理您的平台中使用共享库的所有困难和特殊情况。其中一个困难是调试,因为在调试时,您希望加载未安装在系统中的共享库(它们只是编译)。因此,当libtool构建可执行文件时,它会将其移动到一个隐藏目录(.libs),并通常放置一个与相同名称的脚本或类似物,您可以在其中看到它。该脚本将执行所有魔法以使用正确的库运行正确的程序。
但是,显然您无法使用gdb调试脚本!因此,为了向gdb传递正确的参数,以便能够使用正确的库调试正确的程序,您必须运行以下命令:
$ libtool --mode=execute gdb ./wireshark

您可以通过运行以下命令来查看它执行的操作:

$ libtool --mode=execute echo ./wireshark

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


那不起作用。我在一个目录中尝试使用 libtool e echo binary,它打印了 /path/to/.libs/binary,但直接运行它并没有得到预期的结果,libtool e /path/to/.libs/binary 也是如此。看来这里涉及到的魔法比 echo 和环境变量所能揭示的还要多。 - Pavel Šimerda
@PavelŠimerda:当然,还有更多的魔法。否则,libtool就没有意义了!如果你想要调试,只需执行libtool e gdb binary即可。不要将.libs目录下的文件用于任何重要的事情。但是,如果你想要探索……可以尝试一下,但请注意,libtool非常复杂。 - rodrigo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接