如何使用MonoDevelop调试MonoDevelop加载项?

时间:2012-03-09 16:58:44

标签: debugging mono add-in monodevelop

主题说明了一切。我在monodevelop网站上或通过谷歌找不到任何信息。

即使添加System.Diagnostics.Debugger.Break()并使用mono --debug MonoDevelop.exe投放也似乎没有做任何事情......

2 个答案:

答案 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并在插件的源文件上设置断点。