实时调试技术


18

完全没有什么比调整例程的例程,编译需要花费几分钟时间的代码,执行代码,意识到您的调整方向错误并再次重复该过程的例程更多的了。

我想在进行会话时开始与我的游戏逻辑进行交互。您处理过的方法有哪些?

我很乐意听到iOS,C / C ++和C#/ XNA的解决方案。

Answers:



4

集成完全解释的语言可以使您非常轻松地即时重写游戏元素。

Python,Lua等都可以明确用于此目的。Angel Engine可能可以作为示例。

热加载是另一个需要检查的元素(基本上,会触发一个事件,告诉您资产已更改-配置文件,美术元素等),然后通过一系列调节器对其进行运行,以对其进行修改最终格式,然后将现有格式替换为新格式。

我使用了快速原型引擎,该引擎使用了热加载功能,这是我的荣幸。


2

就涉及XNA的C ++,C#和C#而言,Visual Studio具有出色的调试工具-在代码的任何位置实时暂停应用程序,随时查看分配给变量的值,并逐步调用函数,分析调用堆栈等。此外,Pix和CLR Profiler之类的工具使DirectX(Pix)和基于CLR的语言(CLR Profiler)的开发变得非常出色。

此外,使用游戏的一个特别有用的部分是,我们有足够的空间来编写调试文本,图形等。实时显示内存使用情况,绘制的对象/顶点数量,帧速率等是绘制到屏幕上的常见信息。


1
尽管VS是出色的开发工具,但正常的调试需要时间-寻找断点,单步执行代码,更改变量,重新启动流程。这个问题是寻找一个直接的方式做事情像移动的接口组件,或者调整一个老板的攻击率等
大卫·麦格劳

2

在C / C ++中,一个简单的技巧是将可调整项放入静态变量,触发断点,在调试器中更改静态变量,并且该静态变量将一直存在直到退出。


不过,使其成为函数内部的静态变量。如果是全局静态的,Visual Studio可能无法显示其价值。
Kaj 2010年

2

HTTP日志记录是一个巨大的帮助,并且不难启动和运行。您甚至可以将Google App引擎用作使它运行的快速方法。数据总是有用的。

脚本和XML可以即时重新加载,无需重置。让他们失败而不破坏游戏。这为艺术家,测试人员和设计师提供了强大的力量。

游戏内调试菜单一个简单的游戏内调试菜单,您可以将其作为儿童生成,并使用引擎滑块和游戏滑块冻结游戏。允许您在运行时调整键号,并可能执行一两个调试功能或信息转储。

我也喜欢David的回答中提到的ASYNC套接字

易于使用您的游戏团队必须能够添加并非常轻松地使用它们,否则它们将不被使用。


2

我知道肖恩·詹姆斯已经说过了。但认真的说,Visual Studio(特别是调试工具)对此非常有用。

这些天我很少使用C ++,所以我不确定它们在这里的适用程度。但是对于C#(包括C#Express),您可以:

  • 编辑并继续 -您可以在其中对游戏逻辑进行全面更改。
  • 监视窗口 -在这里你可以查看和修改变量轻松。

这可能会让您大吃一惊(当我发现它时,它就让我震惊了):

即时窗口实际上很难找到(位于“调试/ Windows”菜单中)。

使用Visual C#调试器的唯一主要缺点是它不喜欢更改const值。因此,我通常会static在调整它们的同时,使其与游戏性相关的值不变。

(另外:拥有两个监视器会很有帮助。)


现在,我必须承认上述方法涉及暂停您的应用程序-对于某些特别棘手的事情,这可能会令人不快地慢。

在这些罕见的情况下,我的工作(在XNA中)是简单地破解一些代码(可能使用上面的Edit and Continue,如上所述)来抓取Keyboard.GetState().IsKeyDown()(实际上,我为此提供了一个更易于键入的包装器)并调整了通过击键值。任何更复杂的操作都不值得。


在实践中我通常发现大大更重要的是能够想象(而不是修改)的实时值。为此,我有一个不错的小类,可以缓冲要在帧末尾绘制的线条和文本。这对于快速制作原型也很有用。

(再次,很高兴能够在运行时“编辑并继续”这些可视化。)


(来源:andrewrussell.net
从这里开始

恐怕此刻(也许以后)我没有“很好的”源发布。但这基本上只是行(对于此圆形库)和字符串(对于XNA的内置SpriteBatch)的列表。只需将其public static放置在某处,然后使用适当的变换绘制所有内容,以使所有内容都出现在“世界空间”中(然后清除下一帧的列表)。


1

为C / C ++编写一个简单的反射系统相当简单。这样,您就可以浏览游戏中的所有变量(使用网络工具,键盘或游戏手柄),并将其更改为您的内心需求。它对我有用,但以上所有答案均有效。

编辑添加:该线程现在要进行调整,而不是按照线程标题进行调试。


0

我在多个工作室中看到的一种解决方案是使用网络将外部调试应用程序附加到您的程序上。该应用程序显示特定的公开变量,并允许您实时编辑它们。添加新变量只需在游戏代码中添加一些宏即可。

游戏端宏,服务器/客户端协议(我见过的解决方案只是将xml前后序列化)和编写客户端的初始设置很大。但是,它非常有用,特别是因为使用网络进行通信意味着您可以在任何平台上工作。


0

将变量的加载和读取绑定到文本文件中,并使用控制台中的特定键绑定或命令将其启动。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.