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

tur*_*ang 5 linux gdb libtool wireshark

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

我已经读过了man libtool,它说libtool是一个工具,可以很容易地使用各种类型.a.o简单的界面,但我不知道gdb wireshark使用libtool可以实现的关键是什么.

rod*_*igo 5

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

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

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

$ libtool --mode=execute gdb ./wireshark
Run Code Online (Sandbox Code Playgroud)

您可以通过运行来查看它的功能:

$ libtool --mode=execute echo ./wireshark
Run Code Online (Sandbox Code Playgroud)

只是不要.libs直接使用这些文件:使用always libtool或包装器脚本.