Как управляемый исполняемый файл C# может перейти в код неуправляемого общего объекта C++ с помощью отладчика Monodevelop на платформе Ubuntu Linux 15.10?

Как управляемый исполняемый файл C# может перейти в код неуправляемого общего объекта C++ с помощью отладчика Monodevelop на платформе Ubuntu Linux 15.10?

Мы хотели бы узнать, как управляемый исполняемый файл C#, работающий в среде mono, может перейти в код неуправляемого общего объекта C++ с помощью отладчика Monodevelop на платформе Ubuntu Linux 15.10. Версия Monodevelop — 5.5, версия mono — Mono JIT-компилятор версии 3.2.8 (Debian 3.2.8+dfsg-4ubuntu4), а версия .NET — 4.5. Я использовал gdb для перехода в код неуправляемого общего объекта C++. Однако мы хотели бы использовать исключительно отладчик Monodevelop на платформе Ubuntu Linux 15.10 как для управляемого кода C#, так и для неуправляемого кода C#. Заранее спасибо.

решение1

Мне только что сообщили, что в принципе это не поддерживается. Была предпринята попытка заставить это работать, но не хватает времени и интереса, чтобы это заработало.

https://github.com/mono/debugger-libs/tree/lldb-debugging

Запросы на добавление всегда приветствуются.

решение2

  1. Загрузите свое решение C#/.NET в Monodevelop, соберите и запустите с отладкой

  2. ps -ef Обратите внимание, что сам по себе mono не разветвляет процессы, за исключением случаев, когда это делает ваш код... ваш управляемый C# xyz.exe загружается внутри процесса mono и выполняется как единое целое без разветвления

  3. Определите идентификатор процесса (PID) интересующего вас монопроцесса "/usr/bin/mono --debug --debugger-agent", который в данном примере равен 7575

  4. Неуправляемый общий объект C++ следует скомпилировать с параметром -g для создания таблицы символов.

    ~/InteroperabilityTest/MySQLVersion/Debug$ sudo gdb 7575 GNU gdb (Ubuntu 7.10-1ubuntu2) 7.10 Авторские права (C) 2015 Free Software Foundation, Inc. Лицензия GPLv3+: GNU GPL версии 3 или более позднейhttp://gnu.org/licenses/gpl.html Это свободное программное обеспечение: вы можете свободно изменять и распространять его. НЕТ НИКАКИХ ГАРАНТИЙ, в той мере, в какой это разрешено законом. Введите "show copying" и "show warranty" для получения подробной информации. Этот GDB был настроен как "x86_64-linux-gnu". Введите "show configuration" для получения подробной информации о конфигурации. Инструкции по отправке сообщений об ошибках см.: http://www.gnu.org/software/gdb/bugs/. Найдите руководство GDB и другие ресурсы документации в Интернете по адресу: http://www.gnu.org/software/gdb/documentation/. Для справки введите "help". Введите "apropos word" для поиска команд, связанных со "word"... 7575: Такого файла или каталога нет. (gdb) file BuildIPCameraListLinux.exe Чтение символов из BuildIPCameraListLinux.exe...(отладочные символы не найдены)...выполнено. (gdb) break ClickItCameraList.cpp:176 Таблица символов не загружена. Используйте команду "file". Сделать точку останова отложенной при будущей загрузке разделяемой библиотеки? (y или [n]) y Точка останова 1 (ClickItCameraList.cpp:176) отложена. (gdb) запустить Запуск программы: /home/venkat/InteroperabilityTest/MySQLVersion/Debug/BuildIPCameraListLinux.exe предупреждение: выбранная архитектура i386 несовместима с указанной целевой архитектурой i386:x86-64 предупреждение: архитектура отклонена предоставленное целью описание add-symbol-file-from-memory не поддерживается для этого целевого процесса 7592 выполняет новую программу: /usr/bin/mono-sgen [Отладка потоков с использованием libthread_db включена] Используется библиотека хоста libthread_db "/lib/x86_64-linux-gnu/libthread_db.so.1". [Новый поток 0x7ffff471f700 (LWP 7597)] Точка останова 1, CreateSupportedCameraList() в ./ClickItCameraList.cpp:176 176 { (gdb) шаг 180 std::map > vendorMap; (gdb) шаг std::map, std::allocator >, std::less, std::allocator, std::allocator > > > >::map ( this=0x7fffffffd160) в /usr/include/c++/5/bits/stl_map.h:166 166 : _M_t() { } (gdb) шаг std::_Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std::allocator, std::allocator > > > >::_Rb_tree (this=0x7fffffffd160) в /usr/include/c++/5/bits/stl_tree.h:807 807 _Rb_tree() { } (gdb) step std::_Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std::allocator, std::allocator > > > >::_Rb_tree_impl, false>::_Rb_tree_impl (this=0x7ffffffffd160) at /usr/include/c++/5/bits/stl_tree.h:588 588 _M_node_count(0) (gdb) continue Продолжаем. Я ЗДЕСЬ Сохранить ОК Программа получила сигнал SIGPWR, Сбой питания/перезапуск. [Переключение на поток 0x7ffff471f700 (LWP 7597)] 0x00007ffff74b60c9 в futex_abstimed_wait (cancel=true, private=, abstime=0x0, expected=0, futex=0x98a680 ) в sem_waitcommon.c:42 42 sem_waitcommon.c: Такого файла или каталога нет. (gdb)

Пожалуйста, дай мне знать, если возникнут какие-либо вопросы.

Связанный контент