这个话题说明了一切。我找不到任何信息在monodevelop网站或通过谷歌。
即使添加System.Diagnostics.Debugger.Break()
并使用mono --debug MonoDevelop.exe
运行,似乎也无济于事。
发布于 2012-03-10 07:35:48
mono --debug
与调试器没有任何关系,它只是让Mono跟踪调试信息,这样它就可以在回溯中给你文件/行/列信息。
System.Diagnostics.Debugger.Break()
的行为取决于你的单声道版本。在AFAIK的基本形式中,它设置了一个硬断点,所以如果你的应用程序没有在本地硬调试器中运行,它将简单地崩溃。如果您的应用程序运行在Mono 2.11或更高版本的Mono软调试器中(尚未发布),它将为软调试器设置一个软断点,并按预期工作。
启用外接程序调试的基本方法是在外接程序项目中设置自定义执行命令。打开“项目选项”,转到“Run>Custom命令”部分,为“执行”添加一个自定义命令。将可执行文件设置为MonoDevelop.exe,并将工作目录设置为其包含目录。这意味着当您运行/调试您的项目时,MD将实际执行该可执行文件,而不是直接执行您的项目。如果MonoDevelop.exe加载了你的插件,那么你将能够设置断点,步骤等。
这里最困难的部分是让MD加载你的插件。要做到这一点,一种方法是让您的项目将插件dll输出到MD搜索插件的某个目录中,但这在开发时是一件非常麻烦的事情。一个更好的解决方案是使用未记录的环境变量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>
元素有两个深度,这是一个已知的错误。
发布于 2012-03-10 06:34:06
软调试器还不支持System.Diagnostics.Debugger.Break(),所以它不能工作。
您只需在MonoDevelop中调试MonoDevelop,并在您的插件的源文件上设置断点。
https://stackoverflow.com/questions/9637994
复制相似问题