我推荐使用 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,但它相当低级,尽管 Visual Studio 的 Mono 工具支持连接到软调试器,但它还不能以允许调试 Mono 的方式进行扩展嵌入主机。
使用 MonoDevelop 接受来自嵌入主机的调试器连接目前需要创建一个插件,但这相当简单。以Moonlight 调试器插件为例。对于简单的用例,我建议您不要定义全新的项目类型,而只需创建一个调试处理程序来处理现有的 DotNetExecutionCommand 项目,这样您就可以运行->运行...->您的自定义调试器。
如果您有更多问题,monodevelop-list邮件列表是一个很好的资源。