Wie kann eine verwaltete ausführbare C#-Datei mit dem Monodevelop-Debugger auf einer Ubuntu Linux 15.10-Plattform in den Code eines nicht verwalteten gemeinsam genutzten C++-Objekts einsteigen?

Wie kann eine verwaltete ausführbare C#-Datei mit dem Monodevelop-Debugger auf einer Ubuntu Linux 15.10-Plattform in den Code eines nicht verwalteten gemeinsam genutzten C++-Objekts einsteigen?

Wir möchten wissen, wie eine verwaltete C#-ausführbare Datei, die in der Mono-Umgebung ausgeführt wird, mithilfe des Monodevelop-Debuggers auf einer Ubuntu Linux 15.10-Plattform in den Code eines nicht verwalteten C++-Shared-Objekts einsteigen kann. Die Monodevelop-Version ist 5.5 und die Mono-Version ist Mono JIT-Compiler Version 3.2.8 (Debian 3.2.8+dfsg-4ubuntu4) und die .NET-Version ist 4.5. Ich habe gdb verwendet, um in den Code eines nicht verwalteten C++-Shared-Objekts einzusteigen. Wir möchten jedoch ausschließlich den Monodevelop-Debugger auf einer Ubuntu Linux 15.10-Plattform sowohl für verwalteten als auch für nicht verwalteten C#-Code verwenden. Vielen Dank im Voraus.

Antwort1

Ich wurde gerade darüber informiert, dass dies grundsätzlich nicht unterstützt wird. Es gab einige Versuche, dies zum Laufen zu bringen, aber es fehlt an Zeit und Interesse, es zum Laufen zu bringen.

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

PullRequests sind immer willkommen

Antwort2

  1. Laden Sie Ihre C#/.NET-Lösung in Monodevelop, erstellen Sie sie und führen Sie sie mit Debugging aus.

  2. ps -ef Bitte beachten Sie, dass Mono selbst keine Prozesse aufspaltet, außer wenn Ihr Code dies tut... Ihre verwaltete C# xyz.exe wird in den Mono-Prozess geladen und als solcher ohne Aufspaltung ausgeführt.

  3. Identifizieren Sie die Prozess-ID (PID) des betreffenden Monoprozesses "/usr/bin/mono --debug --debugger-agent", die in diesem Beispiel 7575 ist.

  4. Das nicht verwaltete gemeinsam genutzte C++-Objekt sollte zum Erstellen einer Symboltabelle mit -g kompiliert werden.

    ~/InteroperabilityTest/MySQLVersion/Debug$ sudo gdb 7575 GNU gdb (Ubuntu 7.10-1ubuntu2) 7.10 Copyright (C) 2015 Free Software Foundation, Inc. Lizenz GPLv3+: GNU GPL Version 3 oder höherhttp://gnu.org/licenses/gpl.html Dies ist freie Software: Sie können sie ändern und weitergeben. Es besteht KEINE GARANTIE, soweit gesetzlich zulässig. Geben Sie „show copying“ und „show warranty“ ein, um Einzelheiten zu erfahren. Diese GDB wurde als „x86_64-linux-gnu“ konfiguriert. Geben Sie „show configuration“ ein, um Einzelheiten zu erfahren. Anweisungen zum Melden von Fehlern finden Sie unter: http://www.gnu.org/software/gdb/bugs/. Das GDB-Handbuch und weitere Dokumentationsressourcen finden Sie online unter: http://www.gnu.org/software/gdb/documentation/. Geben Sie „help“ ein, um Hilfe zu erhalten. Geben Sie „apropos word“ ein, um nach Befehlen zu suchen, die mit „word“ in Zusammenhang stehen … 7575: Keine solche Datei oder kein solches Verzeichnis. (gdb) Datei BuildIPCameraListLinux.exe. Symbole aus BuildIPCameraListLinux.exe werden gelesen … (keine Debugsymbole gefunden) … fertig. (gdb) Unterbrechung ClickItCameraList.cpp:176. Es wurde keine Symboltabelle geladen. Verwenden Sie den Befehl „file“. Haltepunkt für zukünftiges Laden gemeinsam genutzter Bibliotheken ausstehend machen? (j oder [n]) j Haltepunkt 1 (ClickItCameraList.cpp:176) ausstehend. (gdb) ausführen. Programm wird gestartet: /home/venkat/InteroperabilityTest/MySQLVersion/Debug/BuildIPCameraListLinux.exe. Warnung: Ausgewählte Architektur i386 ist nicht kompatibel mit gemeldeter Zielarchitektur i386:x86-64. Warnung: Architektur hat die vom Ziel bereitgestellte Beschreibung abgelehnt. Add-Symbol-File-From-Memory wird für diesen Zielprozess 7592 nicht unterstützt. Neues Programm wird ausgeführt: /usr/bin/mono-sgen [Thread-Debugging mit libthread_db aktiviert] Host-libthread_db-Bibliothek "/lib/x86_64-linux-gnu/libthread_db.so.1" wird verwendet. [Neuer Thread 0x7ffff471f700 (LWP 7597)] Haltepunkt 1, CreateSupportedCameraList () bei ./ClickItCameraList.cpp:176 176 { (gdb) Schritt 180 std::map > vendorMap; (gdb) Schritt std::map, std::allocator >, std::less, std::allocator, std::allocator > > > >::map ( this=0x7fffffffd160) bei /usr/include/c++/5/bits/stl_map.h:166 166 : _M_t() { } (gdb) Schritt std::_Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std::allocator, std::allocator > > > >::_Rb_tree (this=0x7fffffffd160) bei /usr/include/c++/5/bits/stl_tree.h:807 807 _Rb_tree() { } (gdb) Schritt std::_Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std::allocator, std::allocator > > > >::_Rb_tree_impl, false>::_Rb_tree_impl (this=0x7ffffffffd160) bei /usr/include/c++/5/bits/stl_tree.h:588 588 _M_node_count(0) (gdb) continue Fortsetzen. ICH BIN HIER Speichern OKAY Programm hat Signal SIGPWR empfangen, Stromausfall/Neustart. [Wechsle zu Thread 0x7ffff471f700 (LWP 7597)] 0x00007ffff74b60c9 in futex_abstimed_wait (cancel=true, privat=, abstime=0x0, erwartet=0, futex=0x98a680) bei sem_waitcommon.c:42 42 sem_waitcommon.c: Keine solche Datei oder kein solches Verzeichnis. (gdb)

Wenn Sie Fragen haben, lassen Sie es mich bitte wissen.

verwandte Informationen