这个主题已经说明了一切。我在monodevelop网站和谷歌上都找不到任何信息。
即使添加System.Diagnostics.Debugger.Break()
并使用mono --debug MonoDevelop.exe
运行,似乎也没有任何作用...
这个主题已经说明了一切。我在monodevelop网站和谷歌上都找不到任何信息。
即使添加System.Diagnostics.Debugger.Break()
并使用mono --debug MonoDevelop.exe
运行,似乎也没有任何作用...
mono --debug
与调试器无关,它只是使Mono跟踪调试信息以便在回溯中提供文件/行/列信息。
System.Diagnostics.Debugger.Break()
的行为取决于你的Mono版本。据我所知,在其基本形式下,它设置了一个硬断点,因此如果你的应用程序没有在本地硬调试器中运行,它将简单地崩溃。如果你的应用程序在Mono 2.11或更高版本的Mono Soft Debugger中运行(尚未发布),它将为软调试器设置软断点,并按预期工作。
启用插件调试的基本方法是在插件项目中设置自定义执行命令。打开“项目选项”,转到“运行>自定义命令”部分,为“执行”添加一个自定义命令。将可执行文件设置为MonoDevelop.exe,将工作目录设置为其所在目录。这意味着当你运行/调试你的项目时,MD实际上会执行该可执行文件,而不是直接执行你的项目。如果MonoDevelop.exe加载了你的插件,那么你就可以设置断点、步进等。
困难的部分在于让MD加载你的插件。一种方法是让你的项目输出插件dll到MD搜索插件的目录之一,但这是在开发时非常hacky的事情。更好的解决方案是使用未记录的环境变量MONODEVELOP_DEV_ADDINS来指定一个额外的目录,从中MD加载插件。MD没有为自定义命令设置环境变量的UI,但它在内部得到支持——你将不得不手动编辑csproj文件。
找到类似于以下内容的部分:
<CustomCommands>
<CustomCommands>
<Command type="Execute"
command="..\..\..\monodevelop\main\build\bin\MonoDevelop.exe"
workingdir="..\..\..\monodevelop\main\build\bin" />
</CustomCommands>
</CustomCommands>
然后将其更改为:
<CustomCommands>
<CustomCommands>
<Command type="Execute"
command="..\..\..\monodevelop\main\build\bin\MonoDevelop.exe"
workingdir="..\..\..\monodevelop\main\build\bin">
<EnvironmentVariables>
<Variable name="MONODEVELOP_DEV_ADDINS" value="${TargetDir}" />
</EnvironmentVariables>
</Command>
</CustomCommands>
</CustomCommands>
<CustomCommands>
元素有两层,那是已知的错误。软件调试器还不支持System.Diagnostics.Debugger.Break(),所以这个方法行不通。
你只需要在MonoDevelop中调试MonoDevelop,并在你的插件源文件上设置断点即可。
MONODEVELOP_DEV_ADDINS
可以工作,但是只能生效一次。除非我退出所有的MD实例,包括带有插件项目的实例,否则只有第一个编译的插件才会被选中。这里发生了一些插件缓存? - Robert Jeppesen