【问题标题】:why i must use libtool --mode==execute gdb wireshark to make it possible debugging wireshark为什么我必须使用 libtool --mode==execute gdb wireshark 才能调试wireshark
【发布时间】:2012-06-15 09:51:13
【问题描述】:

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

我已经读过man libtool,它说libtool是一个工具,可以通过简单的界面轻松使用各种.a.o,但我不知道关键是什么gdb wireshark 可以使用 libtool。

【问题讨论】:

    标签: linux gdb wireshark libtool


    【解决方案1】:

    当您使用 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:当然还有比这更多的魔法。如果没有,libtool 将毫无意义!如果您想调试,只需执行libtool e gdb binary。不要将来自.libs 的文件用于任何严重的事情。但是,如果您想探索……请继续,但请注意 libtool 非常非常复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多