Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为调试目的嵌入脚本语言 我想在OpenGL C++应用程序中嵌入脚本语言(JS、Python、Perl、甚至PHP,任何易于使用的东西)。我想这样做是为了能够做到以下几点: 运行时中C++类成员的打印值 导致在运行时唤醒gdb的中断 在我发现一个bug之后,我想写一个小脚本oneliner来复制它_C++_Debugging_Scripting_Gdb - Fatal编程技术网

为调试目的嵌入脚本语言 我想在OpenGL C++应用程序中嵌入脚本语言(JS、Python、Perl、甚至PHP,任何易于使用的东西)。我想这样做是为了能够做到以下几点: 运行时中C++类成员的打印值 导致在运行时唤醒gdb的中断 在我发现一个bug之后,我想写一个小脚本oneliner来复制它

为调试目的嵌入脚本语言 我想在OpenGL C++应用程序中嵌入脚本语言(JS、Python、Perl、甚至PHP,任何易于使用的东西)。我想这样做是为了能够做到以下几点: 运行时中C++类成员的打印值 导致在运行时唤醒gdb的中断 在我发现一个bug之后,我想写一个小脚本oneliner来复制它,c++,debugging,scripting,gdb,C++,Debugging,Scripting,Gdb,我很确定这不会很容易。我想问一下这是个好主意还是个坏主意,是否值得努力 示例用例 假设我旋转一条线,直到它与某个物体碰撞,并且我的碰撞检测有一些在碰撞时发生的SIGSEGV。我打印出所有的角度,找出哪个是sigsgv之前的一个,我编写了一个显示一些值的小python thingie,这样我就可以找出出了什么问题等等 我想基本上我想做的是避免gdb和嗯。。如果程序失败了,我希望能够用Python检查东西 不是我不喜欢gdb,而是我不喜欢它有限的命令 更新:GDB现在可以开箱即用地扩展。这就解决了许

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

示例用例 假设我旋转一条线,直到它与某个物体碰撞,并且我的碰撞检测有一些在碰撞时发生的SIGSEGV。我打印出所有的角度,找出哪个是sigsgv之前的一个,我编写了一个显示一些值的小python thingie,这样我就可以找出出了什么问题等等

我想基本上我想做的是避免gdb和嗯。。如果程序失败了,我希望能够用Python检查东西

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


更新:GDB现在可以开箱即用地扩展。这就解决了许多问题的局限性

如果这是个好主意还是个坏主意,我都忍不住要问


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

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

您使用哪种IDE?您可能需要尝试跨平台IDE代码::Blocks,它可以非常灵活地与GDB进行接口

如果你想与另一种语言交互,你可能想看看“Lua”。这很容易学。 看

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


<>这当然也适用于C++。

< P>我不认为为了调试嵌入脚本语言的目的是个好主意。这是绝对可能的,但是对于所有你希望能够从脚本语言访问的东西,你必须提供一些接口,因为至少我有知识——没有直接调用C++或从脚本语言读取C++数据结构的方法。如果您不想直接使用gdb,我建议您学习gdb或寻找gdb前端。我用过,发现它很有用。的gdb前端也可用。使用调试器给你更多的灵活性,因为调试器知道C++和它的数据结构,因此允许你在运行时检查任何东西,而不必手工编写很多支持代码。

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


例如:

我理解你的意思。GDB对于简单的东西使用起来很简单,我知道如何使用它,但我希望有更多的控制。正因为如此,我才不使用IDE。我打算在我正在编写的应用程序中构建一个控制台,以便能够查询内容并查看其中的值。我会考虑你的建议与Lua,虽然我不知道它的语法。你知道为什么Lua在gamedev中如此使用吗?我见过很多次使用它,不知道为什么1:GDB不是简单的东西。您几乎可以调试任何东西,甚至可以调试注入的机器代码。(事实上,我目前正在从事JIT编译器的工作。)你可能想读一读——已经出版了关于它的书籍,因为它一点也不简单2:您可以使用Lua非常快速地向程序添加扩展。(又名“Mods”)投票支持卢阿。我在一个简单的OpenGL应用程序中使用了它,它完成了我在这种情况下需要的功能(用于生成运动的简单用户可编辑函数)。@RahulBanerjee这太酷了。你能把你的代码放到github上让我看看吗?感谢您忘记了:对于一点“通过示例”-Lua概述,本页是一个良好的开端: