【问题标题】:Embedding scripting language for debugging purposes为调试目的嵌入脚本语言
【发布时间】:2013-02-21 03:16:36
【问题描述】:

我想在 OpenGL C++ 应用程序中嵌入脚本语言(js、python、perl,甚至 php,任何易于使用的语言)。我想这样做是为了能够执行以下操作:

  • 在运行时打印各种 C++ 类成员的值
  • 导致会在运行时唤醒 gdb 的中断
  • 发现错误后,我想编写一个小脚本 oneliner 来复制它

我很确定这并不容易。我想问一下这是个好主意还是坏主意,是否值得付出努力。

示例用例

假设我旋转一条线,直到它与某物发生碰撞,并且我的碰撞检测有一些在碰撞时发生的 SIGSEGV。我打印出所有的角度,找出哪个是 SIGSEGV 之前的那个,然后我写了一个小 Python 的东西,它显示了一些值,这样我就可以弄清楚出了什么问题等等。

我想基本上我想要做的是避免 gdb 和 uhm.. 如果程序崩溃,我希望有一种方法可以用 Python 进行检查。

不是我不喜欢gdb,而是我不喜欢它有限的命令..

更新: GDB 现在可以扩展 with Python 开箱即用。这解决了canned sequences of commands 的很多限制。

【问题讨论】:

    标签: c++ debugging scripting gdb


    【解决方案1】:

    使用 lua - 它是基于堆栈的简单解释器。使用非常干净的 API。

    例如:Simple code that add dt_format|dt_convert functions to lua

    【讨论】:

      【解决方案2】:

      我不认为出于调试目的嵌入脚本语言是一个好主意。这绝对是可能的,但是对于您希望能够从脚本语言访问的所有内容,您必须提供一些接口,因为至少据我所知,没有办法直接调用 C++或从脚本语言读取 C++ 数据结构。如果您不想直接使用 gdb,我建议您学习 gdb 或寻找 gdb 前端。我用过ddd,发现它非常有用。 Eclipse CDT 的 gdb 前端也可以使用。使用调试器为您提供了更大的灵活性,因为调试器了解 C++ 及其数据结构,因此您可以在运行时检查任何内容,而无需为此手动编写大量支持代码。

      【讨论】:

        【解决方案3】:

        首先:您可以很容易地使用 GDB 将所有这些打印出来。进入 GDB 后,您可能想尝试“帮助数据”显示的内容。

        您使用哪个 IDE?您可能想尝试跨平台的 IDE Code::Blocks,它与 GDB 的接口非常简洁。

        如果你想与另一种语言交互,你可能想看看“Lua”。这很容易学习。 见http://en.wikipedia.org/wiki/Lua_%28programming_language%29

        Lua 旨在嵌入到其他应用程序中,因此它提供了一个强大、易于使用的 C API。 API分为Lua核心和Lua辅助库两部分。

        当然,这也适用于 C++。

        【讨论】:

        • 我明白你的意思。 GDB 很容易用于简单的东西,我知道如何使用它,但我想要更多的控制权。正因为如此,我不使用 IDE。我打算在我正在编写的应用程序中构建一个控制台,以便能够查询事物并查看其中的值。我会考虑你对 Lua 的建议,虽然我不知道它的语法。你知道为什么 Lua 在游戏开发中被如此使用吗?用过很多次了,不知道为什么
        • 1:对于“简单”的东西,GDB 不是“简单”的。您几乎可以调试任何东西,甚至是注入的机器代码。 (我实际上是在使用 JIT 编译器时这样做的。)您可能想阅读 en.wikipedia.org/wiki/GDB#Features - 已经出版了有关它的书籍,因为它绝非简单。 ;) --- 2:您可以使用 Lua 非常快速地为您的程序添加扩展。 (又名“模组”)
        • 为 Lua 点赞。我已经将它与一个简单的 OpenGL 应用程序一起使用,它完成了我在这种情况下所需的功能(用于生成运动的简单用户可编辑函数)。
        • @RahulBanerjee 很酷的拉胡尔。你能把你的代码扔到github上让我看看吗?谢谢
        • 刚刚忘记了:对于一些“示例”-Lua 概述,这个页面是一个好的开始:cc.byexamples.com/2008/06/07/how-to-embed-lua-51-in-c
        【解决方案4】:

        Python 作为应用程序脚本语言是一个非常好的选择。这不是一个强有力的论据,但我知道lua 广泛用于游戏编程(我不知道为什么),因为您使用的是 OpenGL,所以它可能很有用。

        【讨论】:

          【解决方案5】:

          无论是好主意还是坏主意,我都无能为力。

          但你可以看看Chaiscript,它真的很容易与 c++ 一起使用

          【讨论】:

            猜你喜欢
            • 2010-12-07
            • 2011-04-20
            • 2011-09-05
            • 2015-02-14
            • 2017-12-29
            • 2012-10-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多