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

时间:2011-07-13 15:19:33

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

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

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

我正在使用Linux / gcc。

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:0)

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

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

HTH