使用 Mono 进行远程调试
当您使用 Mono 在 Mac 或 Linux 上运行 .NET 应用程序时,您可能会注意到应用程序行为的一些差异或遇到一些奇怪的异常,而这些问题在 Windows 机器上运行相同应用程序时不会出现。 这时,远程调试可能会派上用场。
调试信息
当您以 Debug 模式构建项目时,MSBuild 会生成一个包含调试信息的 PDB 文件,该文件基本上将已编译程序集中的二进制代码与源代码链接起来。 根据 Mono 的版本,您需要不同的 PDB 文件:
5.x 版本支持便携式 PDB 格式,因此请确保项目是以便携式 PDB 构建的。
为此,右键单击项目并选择 属性 ,然后在打开的对话框中选择一个构建配置,并在 调试类型 选择器中选择 可移植。
较早的版本需要 .mdb 格式的调试信息。
您可以使用 pdb2mdb 工具 将 .pdb 转换为 .mdb 。
不过, JetBrains Rider 启用 外部代码调试 ,因此,如果在 JetBrains Rider 设置 Ctrl+Alt+S 的 页面上选中了 启用外部源调试 (默认即选中),即使没有调试信息,您也能够调试远程 Mono 应用。
调试选项
当您在 JetBrains Rider 中打开应用程序的源代码并将其二进制可执行文件或程序集复制到远程机器时,您可以开始调试该应用程序。
首先, 创建一个运行/调试配置 ,类型为 Mono Remote。 在配置选项中,您需要根据希望如何连接到远程应用程序来指定主机和端口:
远程应用程序作为带有调试代理的服务器(带有
server=y标志)。在这种情况下,您需要先在远程机器上启动应用程序,然后启动此运行/调试配置以连接到它。 以下是远程机器上的命令行参数示例:
mono --debugger-agent=address=X.X.X.X:12345,server=y,transport=dt_socket --debug MyDotNet.exe您需要将运行/调试配置的 主持人 和 端口 值设置为 远程机器 的主机/端口,也就是说,如果您使用上述命令行启动远程应用程序,请在 主持人 字段中指定
X.X.X.X,在 端口 字段中指定1234。远程应用程序作为客户端,而 JetBrains Rider 作为 Mono 调试器服务器,因此您可以先启动此运行/调试配置,并等待远程 Mono 应用程序主动连接到调试器。
例如,如果您想调试应用程序的启动过程,可以通过这种方式连接到远程 Mono 应用程序。 以下是远程机器上的命令行参数示例:
mono --debugger-agent=address=Y.Y.Y.Y:34567,server=n,transport=dt_socket --debug MyDotNet.exe在这种情况下,您需要将 主持人 和 端口 值设置为 运行 JetBrains Rider 的机器 的主机/端口,也就是说,如果您使用上述命令行启动远程应用程序,请在 主持人 字段中指定
Y.Y.Y.Y,在 端口 字段中指定34567。
默认情况下,此运行/调试配置将启动一个 Mono 调试器客户端。 要使其作为服务器工作,请选中 监听传入连接 复选框。