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

0

Gostaríamos de saber como um executável C # gerenciado em execução no ambiente mono pode entrar em um código de objeto compartilhado C ++ não gerenciado usando o depurador Monodevelop em uma plataforma Ubuntu Linux 15.10. A versão do Monodevelop é 5.5 e a versão mono é a versão 3.2.8 do compilador Mono JIT (Debian 3.2.8 + dfsg-4ubuntu4) e a versão .NET é 4.5.  Eu usei o gdb para entrar em um código do 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.  Obrigado antecipadamente.

    
por Frank 18.02.2016 / 03:31

2 respostas

0

Acabei de ser notificado de que, basicamente, isso não é suportado. Houve alguma tentativa de fazer isso funcionar, mas falta tempo e interesse para que isso funcione.

link

PullRequests são sempre bem-vindos

    
por 18.02.2016 / 07:26
0
  1. Carregue sua solução C # / .NET no Monodevelop, crie e execute com a depuração

  2. ps -ef Por favor, note que mono em si não bifurca processos, exceto se o seu código faz ... o seu gerenciado C # xyz.exe é 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 Direitos autorais (C) 2015 Free Software Foundation, Inc. Licença GPLv3 +: GNU GPL versão 3 ou posterior link Este é um software livre: você é livre para mudar e redistribuí-lo. NÃO HÁ NENHUMA GARANTIA, na medida permitida por lei. Digite "mostrar cópia" e "mostrar garantia" para detalhes. Este GDB foi configurado como "x86_64-linux-gnu". Digite "show configuration" para detalhes de configuração. Para instruções de relatórios de erros, por favor veja: link . Encontre o manual do GDB e outros recursos de documentação on-line em: link . Para ajuda, digite "help". Digite "apropos word" para procurar comandos relacionados a "word" ... 7575: Não existe tal arquivo ou diretório. (gdb) arquivo BuildIPCameraListLinux.exe Lendo símbolos de BuildIPCameraListLinux.exe ... (sem símbolos de depuração encontrados) ... pronto. (gdb) quebra ClickItCameraList.cpp: 176 Nenhuma tabela de símbolos é carregada. Use o comando "arquivo". Tornar o ponto de interrupção pendente no futuro carregamento da biblioteca compartilhada? (y ou [n]) y Ponto de interrupção 1 (ClickItCameraList.cpp: 176) pendente. (gdb) executar Iniciando o programa: /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: a arquitetura rejeitou a descrição fornecida pelo destino add-symbol-file-from-memory não suportado para este alvo processo 7592 está executando novo programa: / usr / bin / mono-sgen [Thread debugging usando libthread_db ativado] Usando a biblioteca host libthread_db "/lib/x86_64-linux-gnu/libthread_db.so.1". [Novo thread 0x7ffff471f700 (LWP 7597)] Ponto de interrupção 1, CreateSupportedCameraList () em ./ClickItCameraList.cpp:176 176 { passo (gdb) 180 std :: map > vendorMap; passo (gdb) std :: map, std :: alocador & gt ;, std :: less, std :: alocador, std :: allocator > > > > :: map ( isto = 0x7fffffffd160) em /usr/include/c++/5/bits/stl_map.h:166 166: _M_t () {} passo (gdb) std :: _ Rb_tree, std :: allocator > & gt ;, std :: _ Select1st, std :: allocator > > & gt ;, std :: less, std :: allocator, std :: allocator > > > > :: _ Rb_tree (isto = 0x7fffffffd160) em /usr/include/c++/5/bits/stl_tree.h:807 807 _Rb_tree () {} passo (gdb) std :: _ Rb_tree, std :: allocator > & gt ;, std :: _ Select1st, std :: allocator > > & gt ;, std :: less, std :: allocator, std :: allocator > > > > :: _ Rb_tree_impl, false > :: _ Rb_tree_impl (isto = 0x7fffffffd160) em /usr/include/c++/5/bits/stl_tree.h:588 588 _M_node_count (0) (gdb) continuar Continuando. EU ESTOU AQUI Salvar OK Programe o sinal recebido SIGPWR, Power fail / restart. [Mudando para o encadeamento 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: Não existe tal arquivo ou diretório. (gdb)

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

    
por 19.02.2016 / 09:02