在 perl 中调试由 SWIG 包装的共享库
Posted
技术标签:
【中文标题】在 perl 中调试由 SWIG 包装的共享库【英文标题】:debugging a shared library wrapped by SWIG in perl 【发布时间】: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。
【问题讨论】:
【参考方案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 脚本包含调试版本(TCLload
命令中的路径指向模块的调试版本)
在 C++ 代码中放置断点
通过Visual Studio调试器调用TCL脚本;例如使用的命令是tclsh85.exe MyScript.tcl
HTH
【讨论】:
以上是关于在 perl 中调试由 SWIG 包装的共享库的主要内容,如果未能解决你的问题,请参考以下文章