在perl中调试由SWIG封装的共享库

debugging a shared library wrapped by SWIG in perl

本文关键字:封装 共享 SWIG perl 调试      更新时间:2023-10-16

我已经用Perl中的SWIG包装了我的C/c++代码。由于包装的代码,我很少有分段错误。我试图用Perl脚本使用ddd,但不幸的是,即使我在脚本的一行上设置了一个断点(调用C/c++代码的那个),ddd也无法进入C/c++代码。

是否有任何方法设置断点到我的C库当我调试Perl代码或者你知道一个好方法/工具来调试C库当我运行这个Perl脚本?

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

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

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

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

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

HTH