Отладка сборки C #, запущенной встроенной моно-средой выполнения? - PullRequest
4 голосов
/ 06 сентября 2010

Я говорю о небольшом игровом движке, использующем C # для программирования игр. Итак, у меня есть приложение на C ++, встраивающее моно-среду выполнения (я называю это «launcher»). И у меня есть сборка, написанная на C #, которая является моей библиотекой классов игрового движка. Средство запуска запускает сборку, как это предлагается в Embedding Mono .

А теперь интересная часть! Средство запуска реализует в C ++ разные функции, которые выставляются в моно-среду выполнения как внутренние методы классов моего игрового движка. Вот почему моя сборка игрового движка - ничто без лаунчера, который реализует огромную часть движка в C ++.

Вопрос: как мне отладить мою сборку C #? И что более важно, как я должен отлаживать игру, которую я собираюсь написать на C # ???

Как вы понимаете, я не могу отладить сборку с помощью MonoDevelop Debugger, потому что он не получит внутренние реализации C ++ некоторых своих методов.

Мне нужно запустить Launcher. Затем программа запуска запустит сборку C #, используя встроенную моно-среду выполнения. И тогда мне нужно что-то подключить к запущенной сборке, чтобы разрешить ее отладку.

Или любым другим способом. Спасибо!

Ответы [ 2 ]

5 голосов
/ 08 сентября 2010

Я рекомендую использовать Mono Soft Debugger. Он включен в среду выполнения Mono начиная с Mono 2.6, он более надежен, чем старый жесткий отладчик, а также гораздо более переносим.

Программный отладчик Mono можно запустить, передав параметры с помощью аргумента командной строки --debugger-agent в среду выполнения Mono. Это можно сделать из встроенного хоста, создав поддельный набор аргументов командной строки и передав его в mono_jit_parse_options. Например, плагин браузера Moonlight использует значения агента отладчика из переменной среды MOON_SOFT_DEBUG, если она установлена.

Обычно параметры отладчика выглядят как

--debugger-agent="transport=dt_socket,address=$ADDRESS:$PORT"

, что заставит приложение попытаться подключиться к отладчику, прослушивающему по указанному адресу, и приостановит работу, пока не установит соединение. Обратите внимание, что соединение устанавливается через TCP / IP, что означает, что удаленную отладку очень легко настроить, и даже на локальном компьютере вы будете использовать localhost. Дополнительные параметры описаны на справочной странице Mono.

Другая необходимая вам часть - это графический интерфейс / контроллер отладчика, чтобы прослушивать соединение из вашего приложения, обрабатывать пошаговые операции / визуализацию и т. Д. Я бы предложил использовать MonoDevelop. Существует библиотека для проводного протокола отладчика, которая называется Mono.Debugger.Soft.dll, но она довольно низкоуровневая, и хотя Mono Tools для Visual Studio поддерживает подключение к программному отладчику, она еще не расширяема таким образом, чтобы можно было отлаживать Mono встраивание хостов.

Использование MonoDevelop для приема подключений отладчика от встраиваемых хостов в настоящее время требует создания надстройки, но это довольно просто. Взгляните на Лунный отладчик addin для примера. Для простых случаев использования я бы предложил, чтобы вы не определяли целый новый тип проекта, а просто создавали обработчик отладки, который обрабатывает существующие проекты DotNetExecutionCommand, так что вы можете run-> run with ...-> your custom debugger .

Список рассылки monodevelop-list - хороший ресурс, если у вас есть дополнительные вопросы.

1 голос
/ 07 сентября 2010

Используйте отладку по сети.

Вы можете использовать Soft Debugger для отладки деталей Mono, а затем использовать удаленную отладку для деталей C ++.

...