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

标签 linux gdb wireshark libtool

我正在尝试查看 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/

相关文章:

rust - 如何在 rust-gdb 中打印调用 Rust 函数的结果?

linux - 更改 Buildroot Raspberry Pi 默认配置的内核头版本

gdb - 在我的 Mac 上的 gdb 7.6 上运行 make 时出错

c++ - 如何从 Linux 应用程序发送 ifconfig?

java - JDB 中 GDB 'start' 的等价物?

tcp - Wireshark 不识别 RTMP 流

python - Python 3.4 和阅读这个简单的 XML 站点有什么关系?

.net - 不一致的 TCP 保活频率

c++ - 有没有人有更多关于标准输入和标准输出的信息?

linux - 如何编辑 CSV 文件中的单元格