使用SWIG在Perl中包装共享库进行调试

8
我已经使用SWIG将我的C/C++代码包装在Perl中。由于包装后的代码,我遇到了一些分段错误。我尝试使用ddd调试Perl脚本,但不幸的是,即使我在脚本中设置断点(调用C/C++代码的那行),ddd也无法进入C/C++代码。
请问,在调试Perl代码时,是否有办法在C库中设置断点?或者您是否知道在运行此Perl脚本时调试C库的好方法/工具?
我正在使用Linux/gcc。
2个回答

7

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

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

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


如果我正在使用Komodo,我该如何调试它? - rpg
嗨rpg。我不知道。我查了一下,Komodo似乎是一个仅用于调试PERL脚本的IDE。当Perl调用共享库时,我不知道它是否能够调试C/C++指令。使用GDB时,起点是PERL解释器二进制文件。断点设置在C/C++代码行上,而不是Perl脚本行上。 - Abruzzo Forte e Gentile

0

我只用过SWIG来调用TCL中的C++,并使用Visual Studio进行调试,但是相同的思路也适用于您的情况。我将描述我所做的调试步骤,希望您能够找到如何将其应用于您的情况。

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

希望对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接