嵌入脚本语言用于调试目的

时间:2013-03-06 11:00:30

标签: c++ debugging scripting gdb

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

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

我很确定这并不容易。我想问一下这是一个好/坏的想法,是否值得努力。

示例用例

让我们假设我旋转一条直到碰撞出来的东西,我的碰撞检测有一些碰撞后发生的SIGSEGV。我打印出所有的角度,找出哪一个是SIGSEGV之前的那个,我写了一个小的python thingie,它显示了一些值,所以我可以弄清楚出了什么问题等。

我猜基本上我要做的就是避免使用gdb和uhm ..我想如果该程序有办法在Python中检查一些东西。

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

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

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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 ++。

答案 2 :(得分:0)

如果这是一个好主意或坏主意,我无法帮助解决问题。

但你可以看看Chaiscript这对c ++来说真的很容易使用

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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