【发布时间】:2012-03-09 16:58:43
【问题描述】:
主题说明了一切。我在 monodevelop 网站或谷歌上找不到任何信息。
即使添加System.Diagnostics.Debugger.Break() 并使用mono --debug MonoDevelop.exe 运行似乎也没有任何作用..
【问题讨论】:
标签: debugging mono add-in monodevelop
主题说明了一切。我在 monodevelop 网站或谷歌上找不到任何信息。
即使添加System.Diagnostics.Debugger.Break() 并使用mono --debug MonoDevelop.exe 运行似乎也没有任何作用..
【问题讨论】:
标签: debugging mono add-in monodevelop
mono --debug 与调试器没有任何关系,它只是让 Mono 跟踪调试信息,以便它可以在回溯中为您提供文件/行/列信息。
System.Diagnostics.Debugger.Break() 的行为取决于您的 Mono 版本。 AFAIK 的基本形式设置了一个硬断点,因此如果您的应用程序没有在本机硬调试器中运行,它只会崩溃。如果您的应用在 Mono 2.11 或更高版本(尚未发布)的 Mono Soft Debugger 中运行,它将为软调试器设置一个软断点并按预期工作。
启用插件调试的基本方法是在插件项目中设置自定义执行命令。打开“项目选项”,进入“运行>自定义命令”部分,为“执行”添加自定义命令。将可执行文件设置为 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> 元素是两层深度,那是一个已知错误。
【讨论】:
MONODEVELOP_DEV_ADDINS 有效,但只有一次。除非我退出所有 MD 实例,包括带有插件项目的实例,否则只有第一个编译的插件将被拾取。有一些加载项缓存正在进行吗?
软调试器还不支持 System.Diagnostics.Debugger.Break(),所以这不起作用。
您只需要在 MonoDevelop 中调试 MonoDevelop 并在插件的源文件上设置断点。
【讨论】:
Run > Debug Application > MonoDevelop.exe 什么都不做..