本文分两部分:先介绍 mono 生成的 exe 如何单独调试,再说明混合编程场景下如何对 C# 代码进行调试。调试工具均为 VSCode 的 SDB mono debug 扩展。
第一部分:调试 mono 生成的 exe
-
打开 VSCode,安装 mono debug 扩展。
-
使用
mcs命令行编译代码,注意加上-debug参数:mcs -debug Program.cs -
执行
mono启动调试代理,命令如下:mono --debug --debugger-agent=transport=dt_socket,server=y,address=127.0.0.1:5412 Program.exe然后在 VSCode 中配置对应的调试环境。
-
按 F5 启动调试,断点即可正常命中。
查阅官方文档尝试了很久未能解决,最终通过上述原始方法获得灵感,找到了可行方案。
第二部分:混合编程下调试 C# 代码
-
需要将 pdb 文件转换为 mdb 文件供调试使用。mono 提供了
pdb2mdb.bat命令行工具来完成此转换。 -
在 C++ 代码中加载调试所需的 mdb 文件信息,并开启调试命令行。
通过
mono_debug_open_image_from_memory函数加载对应的 mdb 调试文件。 -
在 VSCode 中打下断点,按 F5 运行即可开始调试。
注意:jit 命令行参数设置 suspend=y 时,必须在启动调试器后才会命中断点。如果是中途 attach,断点将不会被命中。