调试嵌入式单声道运行时启动的C#程序集?

Ant*_*rov 4 debugging mono interop mono-embedding

我在谈论使用C#进行游戏编程的小型游戏引擎.所以,我有一个嵌入单声道运行时的C++应用程序(我称之为'启动程序').我有一个用C#编写的程序集,它是我的游戏引擎类库.启动程序按照Embedding Mono中的建议启动程序集.

而现在有趣的部分!启动器实现了C++ miscelaneous函数,这些函数作为我的游戏引擎类的内部方法暴露给单声道运行时.这就是为什么我的游戏引擎组件没有启动器,它在C++中实现了大部分引擎.

问题:我应该如何调试我的C#程序集?而更重要的是,我应该如何调试我将用C#编写的游戏?

如您所知,我无法使用MonoDevelop Debugger调试程序集,因为它不会接收某些方法的内部C++实现.

我需要的是运行启动器.然后启动器将使用嵌入式单声道运行时启动C#程序集.然后我需要一些东西连接到已启动的程序集以允许其调试.

或任何其他方式.谢谢!

Mik*_*son 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"
Run Code Online (Sandbox Code Playgroud)

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

您需要的另一件是调试器GUI /控制器,从您的应用程序中侦听连接,并处理步进/可视化等.我建议使用MonoDevelop.有一个名为Mono.Debugger.Soft.dll的调试器线程协议库,但它相当低级,虽然Mono Tools for Visual Studio支持连接到软调试器,但它还不能以允许调试Mono的方式进行扩展嵌入主机.

使用MonoDevelop接受来自嵌入主机的调试器连接当前需要创建一个插件,但这非常简单.以一个例子来看看Moonlight调试器插件.对于简单的用例,我建议您不要定义一个全新的项目类型,而只是创建一个处理现有DotNetExecutionCommand项目的调试处理程序,这样您就可以运行 - >运行...->您的自定义调试器.

如果您有更多问题,monodevelop-list邮件列表是一个很好的资源.