我说的是使用C#进行游戏编程的小型游戏引擎。 所以,我有一个嵌入单声道运行时的C ++应用程序(我称之为'启动程序')。我有一个用C#编写的程序集,它是我的游戏引擎类库。启动器按照Embedding Mono中的建议启动装配。
现在是有趣的部分! 启动器实现了C ++ miscelaneous函数,这些函数作为我的游戏引擎类的内部方法暴露给单声道运行时。这就是为什么我的游戏引擎组件没有启动器,它在C ++中实现了大部分引擎。
问题:我应该如何调试我的C#程序集?更重要的是,我应该如何调试我将用C#编写的游戏?
如您所知,我无法使用MonoDevelop Debugger调试程序集,因为它不会接收某些方法的内部C ++实现。
我需要的是运行启动器。然后启动器将使用嵌入式单声道运行时启动C#程序集。然后我需要一些东西连接到已启动的程序集以允许其调试。
或任何其他方式。谢谢!
答案 0 :(得分:5)
我建议使用Mono Soft Debugger。它自Mono 2.6以来一直被包含在Mono运行时中,并且比旧的硬调试器更可靠,而且更加便携。
可以通过使用--debugger-agent
命令行参数将选项传递给Mono运行时来启动Mono软调试器。这可以通过构建一组假的命令行参数并将其传递给mono_jit_parse_options
从嵌入主机完成。例如,Moonlight浏览器插件使用MOON_SOFT_DEBUG环境变量中的调试器代理值(如果已设置)。
通常,调试器选项类似于
--debugger-agent="transport=dt_socket,address=$ADDRESS:$PORT"
这将导致应用程序尝试连接到侦听器侦听给定地址,并暂停直到它建立连接。请注意,连接是通过TCP / IP建立的,这意味着远程调试非常容易设置,甚至在本地计算机上也可以使用localhost。其他选项记录在Mono的手册页中。
您需要的另一件是调试器GUI /控制器,从您的应用程序中侦听连接,并处理步进/可视化等。我建议使用MonoDevelop。有一个名为Mono.Debugger.Soft.dll的调试器线程协议库,但它相当低级,虽然Mono Tools for Visual Studio支持连接到软调试器,但它还不能以允许调试Mono的方式扩展嵌入主机。
使用MonoDevelop接受来自嵌入主机的调试器连接当前需要创建一个插件,但这非常简单。请查看Moonlight debugger addin的示例。对于简单的用例,我建议您不要定义一个全新的项目类型,只需创建一个处理现有DotNetExecutionCommand项目的调试处理程序,这样您就可以运行 - >运行...->您的自定义调试器
如果您有更多问题,monodevelop-list邮件列表是一个很好的资源。
答案 1 :(得分:1)
利用网络调试。
您可以使用Soft Debugger调试Mono部件,然后使用remote debugging作为C ++部件。