主题说明了一切。我在monodevelop网站上或通过谷歌找不到任何信息。
即使添加System.Diagnostics.Debugger.Break()
并使用mono --debug MonoDevelop.exe
投放也似乎没有做任何事情......
答案 0 :(得分:10)
mono --debug
与调试器没有任何关系,它只是让Mono跟踪调试信息,因此它可以在回溯中为你提供文件/行/ col信息。
System.Diagnostics.Debugger.Break()
的行为取决于您的Mono版本。 AFAIK以其基本形式设置了一个硬断点,因此如果你的应用程序没有在本机硬调试器中运行,它就会崩溃。如果您的应用程序在带有Mono 2.11或更高版本(尚未发布)的Mono Soft Debugger中运行,它将为软调试器设置软断点并按预期工作。
启用插件调试的基本方法是在插件项目中设置自定义执行命令。打开“项目选项”,进入“运行>自定义命令”部分,为“执行”添加自定义命令。将可执行文件设置为MonoDevelop.exe,将工作目录设置为其包含目录。这意味着当您运行/调试项目时,MD将实际执行该可执行文件,而不是直接执行您的项目。如果MonoDevelop.exe加载你的插件,那么你将能够设置断点,步骤等。
这里的困难部分是让MD加载您的插件。实现此目的的一种方法是让您的项目将addin dll输出到MD搜索插件的其中一个目录中,但这在开发时非常麻烦。更好的解决方案是使用未记录的环境变量MONODEVELOP_DEV_ADDINS来指定MD加载插件的附加目录。 MD中没有用于为自定义命令设置env变量的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>
元素是两个深的,那就是一个已知的错误。
答案 1 :(得分:0)
软调试器尚不支持System.Diagnostics.Debugger.Break(),因此不起作用。
您只需在MonoDevelop内调试MonoDevelop并在插件的源文件上设置断点。