Как я могу отлаживать надстройки MonoDevelop с MonoDevelop? - PullRequest
5 голосов
/ 09 марта 2012

В теме все сказано. Я не могу найти какую-либо информацию на сайте monodevelop или через Google.

Даже добавление System.Diagnostics.Debugger.Break() и запуск с mono --debug MonoDevelop.exe, похоже, ничего не делают ..

Ответы [ 2 ]

10 голосов
/ 10 марта 2012

mono --debug не имеет ничего общего с отладчиком, он просто заставляет Mono отслеживать отладочную информацию, чтобы он мог предоставить вам информацию о файлах / строках / столбцах в следах.

Поведение System.Diagnostics.Debugger.Break() зависит от вашей моно версии.AFAIK в своей базовой форме устанавливает жесткую точку останова, поэтому, если ваше приложение не работает в собственном жестком отладчике, оно просто рухнет.Если ваше приложение работает в Mono Soft Debugger с Mono 2.11 или более поздней версии (которая еще не была выпущена), оно установит мягкую точку останова для Soft Debugger и будет работать как положено.

Основной способ включенияотладка надстроек заключается в установке собственной команды выполнения в вашем проекте надстройки.Откройте «Параметры проекта», перейдите в раздел «Выполнить> Пользовательские команды», добавьте пользовательскую команду для «Выполнить».Задайте для исполняемого файла MonoDevelop.exe, а рабочим каталогом будет его содержащий каталог.Это означает, что когда вы запускаете / отлаживаете свой проект, MD фактически выполнит этот исполняемый файл вместо непосредственного выполнения вашего проекта.Если MonoDevelop.exe загружает ваше дополнение, вы сможете установить точки останова, шаг и т. Д.

Сложная часть - заставить MD загрузить ваше дополнение.Один из способов сделать это состоит в том, чтобы ваш проект вывел addin dll в один из каталогов, которые MD ищет надстройки, но это очень хакерская вещь во время разработки.Лучшее решение - использовать недокументированную переменную среды MONODEVELOP_DEV_ADDINS, чтобы указать дополнительный каталог, из которого MD может загружать надстройки.В MD нет пользовательского интерфейса для установки переменных env для пользовательских команд, но он поддерживается внутри - вам придется вручную редактировать файл 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> имеют две глубины, это известная ошибка.

0 голосов
/ 10 марта 2012

программный отладчик еще не поддерживает System.Diagnostics.Debugger.Break (), поэтому он не будет работать.

Вам просто нужно отладить MonoDevelop внутри MonoDevelop и установить точки останова в исходных файлах вашего дополнения.

...