Como um executável C# gerenciado pode entrar no código de um objeto compartilhado C++ não gerenciado usando o depurador Monodevelop em uma plataforma Ubuntu Linux 15.10?

Como um executável C# gerenciado pode entrar no código de um objeto compartilhado C++ não gerenciado usando o depurador Monodevelop em uma plataforma Ubuntu Linux 15.10?

Gostaríamos de saber como um executável C# gerenciado em execução no ambiente mono pode entrar no código de um objeto compartilhado C++ não gerenciado usando o depurador Monodevelop em uma plataforma Ubuntu Linux 15.10. A versão Monodevelop é 5.5 e a versão mono é o compilador Mono JIT versão 3.2.8 (Debian 3.2.8+dfsg-4ubuntu4) e a versão .NET é 4.5. Eu usei o gdb para entrar no código de um objeto compartilhado C++ não gerenciado. No entanto, gostaríamos de usar apenas o depurador Monodevelop em uma plataforma Ubuntu Linux 15.10 para código C# gerenciado e código C# não gerenciado. Agradeço antecipadamente.

Responder1

Acabei de ser notificado de que basicamente isso não é suportado, houve alguma tentativa de fazer isso funcionar, mas falta tempo e interesse para fazê-lo funcionar.

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

PullRequests são sempre bem-vindos

Responder2

  1. Carregue sua solução C#/.NET no Monodevelop, construa e execute com depuração

  2. ps -ef Observe que o mono em si não bifurca processos, exceto se o seu código o fizer ... seu C # xyz.exe gerenciado é carregado dentro do processo mono e executado como um sem bifurcação

  3. Identifique o ID do processo (PID) do processo mono de interesse" /usr/bin/mono --debug --debugger-agent que é 7575 neste exemplo real

  4. O objeto compartilhado C++ não gerenciado deve ser compilado com -g para criar uma tabela de símbolos.

    ~/InteroperabilityTest/MySQLVersion/Debug$ sudo gdb 7575 GNU gdb (Ubuntu 7.10-1ubuntu2) 7.10 Copyright (C) 2015 Free Software Foundation, Inc. Licença GPLv3+: GNU GPL versão 3 ou posteriorhttp://gnu.org/licenses/gpl.html Este é um software livre: você é livre para alterá-lo e redistribuí-lo. NÃO HÁ GARANTIA, na medida permitida por lei. Digite “mostrar cópia” e “mostrar garantia” para obter detalhes. Este GDB foi configurado como "x86_64-linux-gnu". Digite "show configuration" para obter detalhes de configuração. Para obter instruções sobre relatórios de bugs, consulte: http://www.gnu.org/software/gdb/bugs/. Encontre o manual do GDB e outros recursos de documentação online em: http://www.gnu.org/software/gdb/documentation/. Para obter ajuda, digite "ajuda". Digite "apropos word" para procurar comandos relacionados a "word"... 7575: Arquivo ou diretório não encontrado. (gdb) arquivo BuildIPCameraListLinux.exe Lendo símbolos de BuildIPCameraListLinux.exe...(nenhum símbolo de depuração encontrado)...concluído. (gdb) break ClickItCameraList.cpp:176 Nenhuma tabela de símbolos foi carregada. Use o comando "arquivo". Tornar o ponto de interrupção pendente no carregamento futuro da biblioteca compartilhada? (y ou [n]) y Ponto de interrupção 1 (ClickItCameraList.cpp:176) pendente. (gdb) execute Programa inicial: /home/venkat/InteroperabilityTest/MySQLVersion/Debug/BuildIPCameraListLinux.exe aviso: A arquitetura selecionada i386 não é compatível com a arquitetura de destino relatada i386:x86-64 aviso: Arquitetura rejeitada descrição fornecida pelo destino add-symbol- arquivo da memória não suportado para este processo de destino 7592 está executando o novo programa: /usr/bin/mono-sgen [Depuração de thread usando libthread_db habilitado] Usando a biblioteca libthread_db do host "/lib/x86_64-linux-gnu/libthread_db.so. 1". [Novo tópico 0x7ffff471f700 (LWP 7597)] Ponto de interrupção 1, CreateSupportedCameraList () em ./ClickItCameraList.cpp:176 176 { (gdb) etapa 180 std::map > vendorMap; (gdb) etapa std::map, std::allocator >, std::less, std::allocator, std::allocator > > > >::map ( this=0x7fffffffd160) em /usr/include/c++/5 /bits/stl_map.h:166 166 : _M_t() { } (gdb) etapa std::_Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std ::allocator, std::allocator > > > >::_Rb_tree (this=0x7fffffffd160) em /usr/include/c++/5/bits/stl_tree.h:807 807 _Rb_tree() { } (gdb) etapa std:: _Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std::allocator, std::allocator > > > >:_Rb_tree_impl, false>::_Rb_tree_impl ( this=0x7fffffffd160) em /usr/include/c++/5/bits/stl_tree.h:588 588 _M_node_count(0) (gdb) continue Continuando. ESTOU AQUI Salvar OK O programa recebeu sinal SIGPWR, falha/reinício de energia. [Mudando para Thread 0x7ffff471f700 (LWP 7597)] 0x00007ffff74b60c9 em futex_abstimed_wait (cancel = true, private =, abstime = 0x0, esperado = 0, futex = 0x98a680 ) em sem_waitcommon.c:42 42 sem_waitcommon.c: Esse arquivo ou diretório não existe. (gdb)

Por favor, deixe-me saber se você tem alguma dúvida.

informação relacionada