【问题标题】:debugging a shared library wrapped by SWIG in perl在 perl 中调试由 SWIG 包装的共享库
【发布时间】:2011-10-04 14:34:50
【问题描述】:

我在 Perl 中使用 SWIG 包装了我的 C/C++ 代码。由于包装的代码,我几乎没有分段错误。我正在尝试将ddd 与 Perl 脚本一起使用,但不幸的是,即使我在脚本的一行(调用 C/C++ 代码的那个)上设置了一个断点,ddd 也无法进入 C/ C++ 代码。

当我调试 Perl 代码时,有什么方法可以在我的 C lib 中设置断点,或者你知道在我运行这个 Perl 脚本时调试 C lib 的好方法/工具吗?

我正在使用 Linux/gcc。

【问题讨论】:

    标签: c++ perl gdb swig script-debugging


    【解决方案1】:

    我做了一件简单的事。我直接在perl解释器上调用了gdb

        gdb /usr/bin/perl
        (gdb) r myscript
        #block the script someway or rerun it
        (gdb) b whatever_my_function
    

    似乎一旦 scipt 运行共享内存也被加载到内存中。一旦发生这种情况,我就可以使用所有信息、函数和断点进行调试。

    【讨论】:

    • 如果我使用的是 Komodo,如何调试它?
    • 嗨 rpg。我不知道。我看了看,Komodo 似乎是一个专门调试 PERL 脚本的 IDE。不知道Perl调用共享库的时候能不能调试C/C++指令。对于 GDB,起点是 PERL 解释器的二进制文件。断点是在一行 C/C++ 代码中设置的,而不是在 Perl 脚本的一行中。
    【解决方案2】:

    我只使用 SWIG 从 TCL 调用 C++,并使用 Visual Studio 对其进行了调试,但同样的想法也应该适用于您的案例。我将描述我为调试所做的工作,希望您能弄清楚如何将其应用于您的情况。

    • 构建 C++ 模块的调试版本
    • 确保 TCL 脚本包含调试版本(TCL load 命令中的路径指向模块的调试版本)
    • 在 C++ 代码中放置断点
    • 通过Visual Studio调试器调用TCL脚本;例如使用的命令是tclsh85.exe MyScript.tcl

    HTH

    【讨论】:

      猜你喜欢
      • 2012-04-24
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 2011-08-02
      • 1970-01-01
      • 2021-09-24
      相关资源
      最近更新 更多