在perl中调试由SWIG封装的共享库
debugging a shared library wrapped by SWIG in perl
我已经用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
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 在cuda线程之间共享大量常量数据
- 如何从具有移动语义的类对象中生成共享指针
- 在c代码之间共享数据的最佳方式
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 将静态库链接到不带-fPIC的共享库中
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 无法在Ubuntu上将共享库与Eclipse链接
- 从python调用openMP共享库时,未定义opnMP函数
- 在为LINUX创建共享库时,如何避免STL的私有/弱副本
- 为什么我的共享库中存在展开符号
- 使用共享指针的函数调用,其对象应为 const
- 具有两个独占锁组的共享锁
- 是否有更好的方法来封装成员对象可以访问的共享存储池?
- 封装在共享指针中时的矢量构造
- CUDA共享内存封装在模板类中,指向相同的内存
- 在perl中调试由SWIG封装的共享库