我说的是使用C#进行游戏编程的小型游戏引擎。因此,我有一个C ++应用程序嵌入单声道运行时(我称其为“启动器”)。我有一个用C#编写的组件,这是我的游戏引擎类库。启动器启动了大会的建议 嵌入单声道.

现在有趣的部分!该启动器以C ++的不良功能实现,这些功能将作为我的游戏引擎类的内部方法暴露于单声道运行时。这就是为什么如果没有发射器在C ++中实现引擎的很大一部分的发射器,我的游戏引擎组件就一无所有。

问题:我应该如何调试我的C#组件?更重要的是,我应该如何调试我要在C#上写的游戏???

如您所知,我无法使用Monodevelop调试器进行调试,因为它不会收到其某些方法的内部C ++实现。

我需要运行发射器。然后,启动器将使用嵌入式单声道运行时启动C#组件。然后,我需要一些东西连接到启动的组件以允许其调试。

或其他任何方式。谢谢!

有帮助吗?

解决方案

我建议使用单声道软调试器。自从Mono 2.6以来,它已包含在单声道运行时,并且比旧的硬调试器更可靠,并且更便携。

单声道软调试器可以通过使用选项使用 --debugger-agent 命令行论证单声道运行时。这可以通过构造一组伪造的命令行参数并将其传递给 mono_jit_parse_options. 。例如,Moonlight浏览器插件使用MOON_SOFT_DEBUG环境变量的调试器代理值设置。

通常是调试器选项

--debugger-agent="transport=dt_socket,address=$ADDRESS:$PORT"

这将导致该应用程序尝试在给定地址上连接到调试器侦听,并暂停直到建立连接。请注意,该连接是通过TCP/IP建立的,这意味着远程调试非常容易设置,甚至在本地计算机上,您也可以使用Localhost。其他选项记录在Mono的Man页面上。

您需要的另一个是调试器GUI/控制器,要收听应用程序中的连接,并处理垫脚/可视化等。我建议使用Monodevelops。有一个用于调试器电线协议的库,称为mono.debugger.soft.dll,但它相当低,尽管Visual Studio的单声道工具支持连接到软调试器的单声道工具,但它尚未以允许允许调试Mono的方式可扩展嵌入主机。

使用Monodevelop接受当前嵌入主机的调试器连接需要创建一个addin,但这非常简单。看一下 月光调试器addin 例如。对于简单的用例,我建议您不定义一个全新的项目类型,而只需创建一个处理现有dotnetexecutionculmand comporty项目的调试处理程序,以便您可以 run->与...->您的自定义调试器一起运行.

单次开发列表 如果您有更多问题,邮件列表是一个很好的资源。

其他提示

利用网络调试。

您可以使用 软调试器 调试单声道零件,然后使用 远程调试 对于C ++零件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top