Linux 为什么我必须使用libtool--mode==executegdbwireshark来调试wireshark

Linux 为什么我必须使用libtool--mode==executegdbwireshark来调试wireshark,linux,gdb,wireshark,libtool,Linux,Gdb,Wireshark,Libtool,我试图查看Wireshark的源代码以了解协议分析, 但我发现,当我只使用gdb./wireshark时,当我按下Ctrl+C并设置一个断点,然后键入C时,进程就会终止。我想知道libtool如何使GDB调试成为可能 我已经读过manlibtool,它说libtool是一种通过简单的界面使各种.a或.o易于使用的工具,但我不知道用libtool实现gdbwireshark的关键是什么,它将处理在平台中使用共享库的所有困难和特殊性 其中一个困难是调试,因为调试时需要加载系统中未安装的共享库(它们只

我试图查看Wireshark的源代码以了解协议分析, 但我发现,当我只使用gdb./wireshark时,当我按下Ctrl+C并设置一个断点,然后键入C时,进程就会终止。我想知道libtool如何使GDB调试成为可能


我已经读过
manlibtool
,它说libtool是一种通过简单的界面使各种
.a
.o
易于使用的工具,但我不知道用libtool实现
gdbwireshark
的关键是什么,它将处理在平台中使用共享库的所有困难和特殊性

其中一个困难是调试,因为调试时需要加载系统中未安装的共享库(它们只是编译的)。因此,当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
。似乎有比回声更神奇的东西,环境变量可以揭示。@PavelŠimerda:当然还有比这更神奇的东西。否则,
libtool
将毫无意义!如果您想调试,只需执行
libtool e gdb binary
。不要将
.libs
中的文件用于任何严重问题。但是如果你想探索。。。继续,但是请注意libtool非常非常复杂。