Debugging 如何使用MonoDevelop调试MonoDevelop外接程序?

Debugging 如何使用MonoDevelop调试MonoDevelop外接程序?,debugging,mono,add-in,monodevelop,Debugging,Mono,Add In,Monodevelop,这个话题说明了一切。我无法在monodevelop网站或通过谷歌找到任何信息 即使添加System.Diagnostics.Debugger.Break()并运行mono--debug MonoDevelop.exe似乎也没有任何作用。软调试器还不支持System.Diagnostics.Debugger.Break(),所以这不起作用 您只需在MonoDevelop中调试MonoDevelop,并在加载项的源文件上设置断点。mono--debug与调试器无关,它只是使mono跟踪调试信息,以便

这个话题说明了一切。我无法在monodevelop网站或通过谷歌找到任何信息


即使添加
System.Diagnostics.Debugger.Break()
并运行
mono--debug MonoDevelop.exe
似乎也没有任何作用。

软调试器还不支持System.Diagnostics.Debugger.Break(),所以这不起作用

您只需在MonoDevelop中调试MonoDevelop,并在加载项的源文件上设置断点。

mono--debug
与调试器无关,它只是使mono跟踪调试信息,以便在回溯中为您提供文件/行/列信息

System.Diagnostics.Debugger.Break()的行为取决于您的Mono版本。AFAIK在其基本形式中设置了一个硬断点,因此,如果您的应用程序没有在本地硬调试器中运行,它将崩溃。如果您的应用程序在Mono 2.11或更高版本(尚未发布)的Mono软调试器中运行,它将为软调试器设置一个软断点,并按预期工作

启用加载项调试的基本方法是在加载项项目中设置自定义执行命令。打开“项目选项”,进入“运行>自定义命令”部分,为“执行”添加自定义命令。将可执行文件设置为MonoDevelop.exe,并将工作目录设置为其包含目录。这意味着当您运行/调试项目时,MD将实际执行该可执行文件,而不是直接执行项目。如果MonoDevelop.exe加载加载项,则可以设置断点、步骤等

这里最困难的部分是让MD加载您的加载项。实现这一点的一种方法是让您的项目将addindll输出到MD搜索addin的目录中,但这在开发时是一件非常麻烦的事情。更好的解决方案是使用未记录的环境变量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>


如果您想知道为什么
元素有两个深度,那么这是一个已知的bug。

您能详细说明一下吗<代码>运行>调试应用程序>MonoDevelop.exe
什么都不做..谢谢!一切正常。我在AddIns目录中有指向addin调试版本的符号链接,所以我没有尝试MONODEVELOP\u DEV_ADDINS@mhutch好主意,谢谢。设置
MONODEVELOP\u DEV\u ADDINS
可以工作,但只能工作一次。除非我退出MD的所有实例,包括带有外接程序项目的实例,否则只有第一个编译的外接程序才会被提取。有一些插件缓存正在进行?注意,这是在OSX上。在Windows中它可以工作。每一个新的编译都会被新发布的XSTBH接受,我现在建议使用“Addin Maker”Addin,它会自动完成所有这些工作。我正在处理的项目是F#绑定,而您的加载项不支持F#。