Como anexar o depurador para entrar no código nativo (C++) de um wrapper gerenciado (C#)?

StackOverflow https://stackoverflow.com/questions/57840

Pergunta

Eu tenho um wrapper em torno de uma chamada de função C++ que chamo do código C#.Como anexei um depurador no Visual Studio para entrar no código C++ nativo?

Este é o wrapper que tenho que chama GetData() definido em um arquivo C++:

    [DllImport("Unmanaged.dll", CallingConvention=CallingConvention.Cdecl, 
               EntryPoint = "GetData", BestFitMapping = false)]
        public static extern String GetData(String url);

O código está travando e quero investigar a causa raiz.

Obrigado, Nikhil

Foi útil?

Solução

Verifique a guia Debug na página de propriedades do seu projeto.Deve haver uma caixa de seleção "Ativar depuração de código não gerenciado".Isso funcionou para mim quando desenvolvemos uma nova UI .NET para nossas antigas DLLs c++.

Se sua DLL não gerenciada estiver sendo construída a partir de outro projeto (por um tempo a nossa estava sendo construída usando VS6), apenas certifique-se de ter o arquivo pdb da DLL em mãos para a depuração.

A outra abordagem é usar o exe C# como o exe de destino para executar a partir do projeto DLL, você pode então depurar sua DLL normalmente.

Outras dicas

além do conselho de Lou para iniciar o depurador, você pode selecionar quais mecanismos de depuração serão usados ​​ao anexar a um processo existente clicando em 'Selecionar...' na caixa de diálogo 'anexar ao processo' e escolhendo 'código gerenciado' e ' Código nativo'.

A depuração dessa forma é chamada de depuração de modo misto.Veja isso postagem no blog para algumas dicas.

Acredito que isso não seja compatível com processos de 64 bits ...embora adoraria estar errado nesse ponto.

Para qualquer pessoa que use WinDbg:

1> Símbolos de configuração

Veja esses comandos.(Ajuda:no console .hh < comando> )

.sympath
.sympath+ 
.symfix

2>Configurar caminho de origem

.srcpath

3> Carregue a extensão SOS para depurar programas de modo gerenciado/misto.

(Certifique-se de ter configurado o caminho de extensão corretamente)

Adicione Microsoft.NET\Framework\v2.0.50727 para x86 usando-

.extpath 

Defina um ponto de interrupção para o clr carregar.

sxe ld:mscorwks

(F5 / g) (aguarde o Modload BP em mscorwks.dll)

Certifique-se de não ter uma extensão SOS duplicada já carregada.Ver:

.chain

Agora estamos prontos para carregar a extensão sos.:)

.loadby sos mscorwks

4> Recarregue todos os símbolos.

.reload

Agora está tudo pronto :)

(YMMV)

A depuração mista não tem suporte no modo de 64 bits (a partir do Visual Studio 2008).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top