1

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

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

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

示例用例

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

我想基本上我想要做的是避免 gdb 和 uhm .. 如果程序崩溃,我想有办法在 Python 中检查东西。

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

更新:现在可以使用 Python扩展 GDB 。这解决了固定命令序列的许多限制。

4

5 回答 5

2

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

于 2013-03-06T12:13:07.867 回答
1

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

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

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

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

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

于 2013-03-06T11:58:56.187 回答
0

如果这是一个好主意或坏主意,我无能为力。

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

于 2013-03-06T11:28:25.207 回答
0

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

例如:将 dt_format|dt_convert 函数添加到 lua 的简单代码

于 2013-12-23T19:17:34.507 回答
0

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

于 2013-03-06T11:49:12.990 回答