How can I debug MonoDevelop add-ins with MonoDevelop?

半腔热情 提交于 2019-11-30 07:33:17

mono --debug doesn't have anything to do with the debugger, it simply causes Mono to track debug information so it can give you file/line/col information in backtraces.

The behaviour of System.Diagnostics.Debugger.Break() depends on your Mono version. AFAIK in its basic form it sets a hard breakpoint, so if your app's not running in a native hard debugger it will simply crash. If your app is running inside the Mono Soft Debugger with Mono 2.11 or later (which has not yet been released), it will set a soft breakpoint for the soft debugger and work as expected.

The basic way to enable debugging of addins is to set a custom execution command in your addin project. Open 'Project Options', got to the 'Run>Custom Commands' section, add a custom command for 'Execute'. Set the executable to MonoDevelop.exe and the working directory to be its containing directory. This means that when you run/debug your project, MD will actually execute that executable instead of executing your project directly. If MonoDevelop.exe loads your addin, then you'll be able to set breakpoints, step, etc.

The difficult part here is making MD load your addin. One way to do this would be to have your project output the addin dll into one of the directories that MD searches for addins, but that's a very hacky thing to do at development time. A better solution is to use the undocumented environment variable MONODEVELOP_DEV_ADDINS to specify an additional directory from which for MD to load addins. There isn't a UI in MD for setting env vars for custom commands, but it is supported internally - you'll have to manually edit the csproj file.

Find the part that looks like:

<CustomCommands>
  <CustomCommands>
    <Command type="Execute"
      command="..\..\..\monodevelop\main\build\bin\MonoDevelop.exe"
      workingdir="..\..\..\monodevelop\main\build\bin" />
  </CustomCommands>
</CustomCommands>

And change it to:

<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>

If you're wondering why the <CustomCommands> elements are two-deep, that a known bug.

the soft debugger doesn't yet support System.Diagnostics.Debugger.Break(), so that won't work.

You just need to debug MonoDevelop inside MonoDevelop and set your breakpoints on the source files of your addin.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!