Debugging 调试嵌入式mono运行时启动的C#程序集?

Debugging 调试嵌入式mono运行时启动的C#程序集?,debugging,mono,interop,mono-embedding,Debugging,Mono,Interop,Mono Embedding,我说的是一个使用C#进行游戏编程的小型游戏引擎。 因此,我有一个C++应用程序,它嵌入Muno运行时(我称之为“启动程序”)。我有一个用C#编写的程序集,这是我的游戏引擎类库。启动器按照中的建议启动程序集 现在是有趣的部分! 启动器以C++的MuleCube函数实现,这些函数作为我的游戏引擎类的内部方法暴露于单运行时。这就是为什么我的游戏引擎组件是没有什么,没有启动器,实现了引擎的巨大部分在C++。 问题是:我应该如何调试我的C#汇编程序?更重要的是,我该如何调试我将要用C语言编写的游戏 您理解

我说的是一个使用C#进行游戏编程的小型游戏引擎。 因此,我有一个C++应用程序,它嵌入Muno运行时(我称之为“启动程序”)。我有一个用C#编写的程序集,这是我的游戏引擎类库。启动器按照中的建议启动程序集

现在是有趣的部分! 启动器以C++的MuleCube函数实现,这些函数作为我的游戏引擎类的内部方法暴露于单运行时。这就是为什么我的游戏引擎组件是没有什么,没有启动器,实现了引擎的巨大部分在C++。 问题是:我应该如何调试我的C#汇编程序?更重要的是,我该如何调试我将要用C语言编写的游戏

您理解,我不能使用MyDebug调试器调试程序集,因为它不接收其某些方法的内部C++实现。 我需要的是运行启动器。然后,启动器将使用嵌入式mono运行时启动C#assembly。然后我需要一些东西来连接到启动的程序集,以便进行调试


或者其他任何方式。谢谢大家!

利用网络调试


可以使用调试单部件,然后使用C++部分。

< P>推荐使用单声道软调试器。它从Mono 2.6开始就包含在Mono运行时中,比旧的硬调试器更可靠,也更具可移植性

可以通过使用
--debugger agent
命令行参数向Mono运行时传递选项来启动Mono软调试器。通过构造一组伪命令行参数并将其传递给
mono\u-jit\u-parse\u-options
,可以从嵌入主机实现这一点。例如,Moonlight浏览器插件使用MOON_SOFT_DEBUG环境变量中的调试器代理值(如果已设置)

通常,调试器选项类似于

--debugger-agent="transport=dt_socket,address=$ADDRESS:$PORT"
这将导致应用程序尝试连接到侦听给定地址的调试器,并暂停,直到建立连接。请注意,连接是通过TCP/IP建立的,这意味着远程调试非常容易设置,甚至在本地计算机上也可以使用localhost。其他选项记录在Mono的手册页上

您需要的另一个部分是调试器GUI/控制器,用于侦听来自应用程序的连接,并处理步进/可视化等。我建议使用MonoDevelop。有一个用于调试器wire协议的库,名为Mono.debugger.Soft.dll,但它的级别相当低,而且尽管Visual Studio的Mono Tools支持连接到软调试器,但它还不能以允许调试Mono嵌入主机的方式扩展

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


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

嵌入Mono链接已断开。请稍后再试-它100%有效。现在也不可用。胡奇,非常感谢!在过去的两天里,我想到了你建议的解决方案。目前我正在深入研究默认的MonoDevelop插件源代码。特别感谢您的“月光调试器插件”链接!我也去了另一个疗养院。看起来我可以使用托管C++(C++/CIL)来连接C++例程和C++汇编程序。因此,我可以有两个配置,一个用于调试目的,这将是MSVC调试程序+托管C++启动程序+ C *调试。第二个版本是使用Mono embedded runtime构建的平台无关版本。是的,如果您设计的应用程序可以使用Mono或.NET运行,那么您可以在Windows上使用awesome.NET混合模式调试器。但我建议避免使用C++/CLI,因为它根本不可移植。混合模式调试器可以与P/Invokes配合使用,而且它们可以移植……我不想在发布版本中使用P/Invoke,因为Mono内部调用提供了性能优势。但是,C++/CIL的P/Invoke允许我使用“Windows上令人敬畏的.NET混合模式调试器”调试代码,正如您所说的。我已经试过了,效果很好。