Отладка с Embedded Mono, как установить точки останова в коде C #? - PullRequest
3 голосов
/ 06 марта 2012

Я использую Embedded Mono, он отлично работает.Основным приложением является C ++, и я могу загружать сборки, создавать объекты, вызывать методы и т. Д.

Что я хочу сделать сейчас, так это возможность использовать MonoDevelop для подключения к моей программе, а затем иметь возможностьустановить точки останова в управляемом (C #) коде.После долгих исследований я передаю следующее:

    static const char* options[] = {
          "--soft-breakpoints",
          "--debugger-agent=transport=dt_socket,address=127.0.0.1:10000"
        };

mono_jit_parse_options(sizeof(options)/sizeof(char*), (char**)options);
mono_debug_init(MONO_DEBUG_FORMAT_MONO);

После выполнения вышеуказанных вызовов приложение подключится к MonoDevelop.

На стороне MonoDevelop я установил env.var MONODEVELOP_SDB_TEST=y, который позволяет вам использовать «Run -> Run With -> Custom Command MonoSoft Debugger, и он будет подключаться к приложению.

Вот хитрая часть: чтобы запустить Run With ->Выбор пользовательской команды MonoSoft Debugger, вам нужно открыть проект, чтобы сделать это, я просто открыл сборку (Сборка отладки), затем в опциях проекта я добавил пользовательскую команду «Выполнить» и указал на C ++ .exe, ипроверил «Запуск на внешней консоли».

После нажатия «Слушать» в диалоговом окне отладчика MonoSoft мое приложение запускается, но в выводе приложения отображаются сообщения о моих сборках, однако, если я открываю исходный файл(C #) и попробуйте установить точку останова, повернуть отключенный цвет и никогда не попадать. Чего мне не хватает, нужно ли мне вызывать какую-то другую функцию mono_debug, чтобы сообщить mono для отладки моих сборок, есть ли какая-то gdb-подобнаясвойство path, указывающее MonoDevelop, где искать источники?

1 Ответ

2 голосов
/ 09 марта 2012

Когда наше приложение печатает трассировки стека (Environment.Stacktrace), они имеют информацию об исходном файле и строке?Если нет, вам следует убедиться, что у вас есть файлы символов mdb рядом со сборками.

Если ваш управляемый код был построен с помощью компиляторов .NET, у вас будут файлы pdb, которые Mono не может загрузить.Используйте инструмент pdb2mdb, чтобы преобразовать их в файлы mdb.

Также убедитесь, что пути к файлам в трассировках стека соответствуют путям к фактическим исходным файлам на хост-компьютере.

...