2010-09-06 2 views
4

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

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

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

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

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

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

+0

Ссылка на "Вложение Моно" отключена. – Clifford

+2

Пожалуйста, попробуйте позже - он действителен на 100%. http://www.mono-project.com/ также недоступен. –

ответ

5

Я рекомендую использовать Mono Soft Debugger. Он был включен в Mono runtime с 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. Дополнительные параметры описаны на странице Mano man.

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

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

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

+0

mhutch, большое вам спасибо! В течение последних двух дней я пришел к решению, которое вы предлагаете. В настоящее время я врывался в исходные файлы MonoDevelop по умолчанию. Благодарим вас за ссылку «Отладчик Moonlight addin»! И я тоже пришел к другому. Похоже, я могу использовать Managed C++ (C++/CIL) для подключения моих подпрограмм C++ с сборкой C#. Таким образом, у меня могут быть две конфигурации для целей отладки, и это будет отладчик MSVC + Managed C++ Launcher + C# debugee. И вторая версия независимой от платформы построена с использованием встроенной среды исполнения Mono. –

+0

Да, если вы создадите приложение, чтобы оно могло работать с использованием Mono или .NET, вы можете использовать классный отладчик смешанного режима .NET в Windows. Я бы рекомендовал избегать C++/CLI, хотя он совсем не переносится. Отладчик смешанного режима отлично работает с P/Invokes, и они * могут * быть переносимыми ... –

+0

Я не хочу использовать P/Invoke в сборках релизов из-за преимуществ производительности, которые дает внутренний вызов Mono. Но P/Invoke с C++/CIL позволяет мне отлаживать мой код с помощью «замечательного отладчика смешанного режима .NET в Windows», как вы сказали. Я пробовал все это, и он отлично работает. –

1

Использовать сетевую отладку.

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

Смежные вопросы