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

发布于 2024-11-20 00:23:26 字数 273 浏览 4 评论 0原文

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

当我调试 Perl 代码时,有什么方法可以在我的 C lib 中设置断点,或者您知道当我运行此 Perl 脚本时调试 C lib 的好方法/工具吗?

我正在使用 Linux/gcc。

I have wrapped my C/C++ code using SWIG in Perl. I have few segmentation fault because of the wrapped code. I am trying to use ddd with the Perl script but unfortunately even if I set a breakpoint on a line of the script ( the one calling C/C++ code ), ddd is not able to step in down to the C/C++ code.

Is there any way to set breakpoint into my C lib when I am debugging Perl code or do you know a good way/tool to debug the C lib when I am running this Perl script?

I am using Linux/gcc.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

所有深爱都是秘密 2024-11-27 00:23:27

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

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

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

I did a simple thing. I called the gdb directly on perl interpreter.

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

It seems that once the scipt is running shared memory is also loaded in memory. Once this happened I have available all information, functions and breakpoint for debugging.

没有你我更好 2024-11-27 00:23:27

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

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

HTH

I've only used SWIG for calling C++ from TCL, and debugged it using Visual Studio, but the same ideas should apply for your case as well. I'll describe what I've done to debug, hopefully you can figure out how to apply it to your situation.

  • Build a debug version of the C++ module
  • Make sure the TCL script is including the debug version (the path in the TCL load command points to the debug version of the module)
  • Place breakpoints in the C++ code
  • Invoke the TCL script through the Visual Studio debugger; for instance the command used is tclsh85.exe MyScript.tcl

HTH

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文