繁体   English   中英

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

Debugging C# assembly launched by embedded mono runtime?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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

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

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

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

或任何其他方式。 谢谢!

2 个回复

我建议使用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调试器插件 对于简单的用例,我建议您不要定义一个全新的项目类型,而只是创建一个处理现有DotNetExecutionCommand项目的调试处理程序,这样您就可以运行 - >运行...->您的自定义调试器

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

利用网络调试。

您可以使用Soft Debugger调试Mono部件,然后对C ++部件使用远程调试

1 当有多个时,C#在运行时在资源设计器中加载正确的嵌入式程序集

我有一些程序集(DLL)作为资源嵌入(在资源设计器中)。 在运行时,我试图加载它们。 为此,我已订阅了以下活动: 然后该方法如下: 当我仅在应用程序中嵌入一个DLL作为资源时,上面的代码就可以很好地工作,因为如上例所示,我知道可以通过Properties.Resources. ...

2 在库项目运行时从嵌入式资源加载程序集

我正在编写DLL项目,并且需要在其中使用外部DLL,并最终将此外部DLL包含在我的DLL中。 我将这个DLL文件添加到项目的嵌入式资源中,并尝试链接到“ AppDomain.CurrentDomain.AssemblyResolve”事件-从嵌入式资源加载dll的函数,但是,我仍然收到消息“ ...

3 从内存中加载程序集(嵌入式Mono运行时)

我想从内存中加载单声道程序集。 因此,我不是使用通常的mono_domain_assembly_open而是使用mono_image_open_from_data 。 返回的图像和程序集均正常,状态为MONO_IMAGE_OK 。 但是,当我尝试使用以下方法从程序集中获取一个类时: ...

5 将 C++ 函数指针传递给带有嵌入式单声道的 C#

我有一个 C# 方法,如下所示: 这段代码被嵌入到一个 C++ 应用程序中,我想从 C++ 调用ObserveVariable函数,传递一个函数指针或与VariableObserver委托等效的东西。 目的是 C# 代码可以调用委托,并且 C++ 函数将被调用。 我习惯于使用mono_runt ...

6 具有并发和单声道支持的C#嵌入式Db

我正在编写一项服务,该服务需要嵌入式数据库来存储基本信息(ID,插入日期,最近更新和我将返回的大量实际数据)。 我将有多个线程同时读取不同的行,并且至少有1个线程同时对行进行更新。 我希望选择一个以上的线程来进行更新,但是我可以仅使用一个线程来进行更新。 基本上,这是一个缓存服务,但是通常 ...

7 从内存中嵌入单声道加载程序集

我正在尝试从内存中加载单声道程序集。 我的问题有两个部分,第一:当我使用mono_image_open_from_data和mono_assembly_load_from组合时,不会加载程序集依赖项。 如果我使用相同的方法手动加载程序集依赖项,它们似乎没有添加到应用程序域中。 所以它不起作用。 所 ...

9 单声道+嵌入式火鸟

大约一年前,我能够使用嵌入式Firebird数据库在Linux机器上运行基于.Net 4.5的Win32应用程序。 为了绝对确定,我删除了Linux服务器上的所有firebird内容,仅复制了适用于Windows的嵌入式dll。 当我使用MONO版本3.12.0运行时,尝试打开数据库 ...

10 OSX上的嵌入式ravendb(单声道)

使用Mono 2.10.8使用RavenDB构建.NET4应用。 当我尝试对OSX上的嵌入式文档存储执行任何操作时,出现以下异常: 从头开始,我尝试打开嵌入式商店并使用它。 我查看了IPGlobalProperties.GetIPGlobalProperties()的Mono实现的源 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM