mono --debug
не имеет никакого отношения к отладчику, он просто заставляет Mono отслеживать информацию об отладке, чтобы он мог предоставить вам информацию о файле/строке/столбце в обратном направлении.
Поведение System.Diagnostics.Debugger.Break()
зависит от вашей версии Mono. AFAIK в своей базовой форме устанавливает сложную точку останова, поэтому, если ваше приложение не работает в собственном жестком отладчике, оно просто сработает. Если ваше приложение работает в Mono Soft Debugger с Mono 2.11 или новее (которое еще не выпущено), оно установит мягкую точку останова для мягкого отладчика и будет работать как ожидалось.
Основным способом включения отладки добавок является установка пользовательской команды выполнения в проекте добавления. Откройте «Параметры проекта», перейдите в раздел «Выполнить> Пользовательские команды», добавьте пользовательскую команду «Выполнить». Установите исполняемый файл MonoDevelop.exe, а рабочий каталог - его содержащий каталог. Это означает, что при запуске/отладке вашего проекта MD фактически выполнит этот исполняемый файл вместо непосредственного выполнения вашего проекта. Если MonoDevelop.exe загружает вашу добавку, вы сможете установить точки останова, шаг и т. Д.
Трудная часть здесь заключается в том, что MD загружает вашу добавку. Один из способов сделать это - предоставить вашему проекту вывод addin dll в одну из каталогов, которые MD ищет для добавления, но это очень хакерская вещь, которую нужно делать во время разработки. Лучшее решение - использовать недокументированную переменную среды MONODEVELOP_DEV_ADDINS, чтобы указать дополнительную директорию, из которой MD загружает аддикаты. В MD нет пользовательского интерфейса для настройки env vars для пользовательских команд, но он поддерживается внутри - вам придется вручную отредактировать файл 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>
элементы два-глубоко, что известная ошибка.
Спасибо! Работает так, как ожидалось. У меня есть символические ссылки на сборку отладки addin в каталоге AddIns, поэтому я не пробовал MONODEVELOP_DEV_ADDINS – simendsjo
@mhutch Прохладный отзыв, спасибо. Установка 'MONODEVELOP_DEV_ADDINS' работает, но только один раз. Если я не выйду из всех экземпляров MD, включая экземпляр с проектом надстройки, будет собрана только первая скомпилированная надстройка. Есть некоторые кеширование надстроек? –
Обратите внимание, что это на OSX. В Windows это работает. Каждый новый компилятор получает новый XS –