2008-09-11 12 views
16

Tengo un contenedor en torno a una llamada de función C++ al que llamo desde el código C#. ¿Cómo conecto un depurador en Visual Studio para ingresar al código nativo de C++?Cómo adjuntar el depurador para pasar al código nativo (C++) desde un contenedor administrado (C#)?

Ésta es la envoltura que tengo que llama a GetData() definido en un archivo de C++:

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

El código se bloquea y quiero investigar la causa raíz.

Gracias, Nikhil

Respuesta

22

Verificar la ficha Depurar en la página propiedades de su proyecto. Debe haber una casilla de verificación "Habilitar la depuración del código no administrado". Esto funcionó para mí cuando desarrollamos una nueva interfaz de usuario de .NET para nuestras antiguas DLL de C++.

Si su DLL no administrada se está construyendo desde otro proyecto (durante un tiempo la nuestra se estaba construyendo utilizando VS6) simplemente asegúrese de tener el archivo pdb de la DLL a mano para la depuración.

El otro enfoque es utilizar el exe C# como el exe de destino para ejecutar desde el proyecto DLL, luego puede depurar su DLL normalmente.

7

Además de los consejos de Lou para iniciar el depurador, puede seleccionar qué motores de depuración se utilizan al adjuntar a un proceso existente haciendo clic en "Seleccionar ..." en el cuadro de diálogo "adjuntar al proceso" y seleccionando ambos código 'y' código nativo '.

La depuración de esta manera se denomina depuración en modo mixto. Consulte esto blog post para algunos consejos.

Creo que esto no es compatible con los procesos de 64 bits ... aunque me encantaría estar equivocado en ese punto.

+0

Gracias por el seguimiento. No suelo usar "adjuntar al proceso", así que me olvido de que es otra opción. aclamaciones. – Lou

2

Para cualquier persona que utilice WinDbg:

1> símbolos de configuración

mirada a estos comandos. (Ayuda: en la consola .hh < comando>)

.sympath 
.sympath+ 
.symfix 

2> Configuración de ruta de origen

.srcpath 

3> Cargar extensión SOS para depurar programas administrados de modo mixto /.

(Asegúrese de que tiene configuración de la ruta extensión correctamente)

Añadir Microsoft.NET \ Framework \ v2.0.50727 para x86 using-

.extpath 

Establecer un punto de interrupción para el CLR para cargar.

sxe ld:mscorwks 

(F5/g) (Espere MODLOAD BP en mscorwks.dll)

Asegúrese de que usted no tiene una extensión sos duplicado ya cargado. Ver:

.chain 

Ahora estamos listos para cargar la extensión sos.:)

.loadby sos mscorwks 

4> Actualizar todos los símbolos ..

.reload 

Ahora ya está todo listo :)

(YMMV)

2

depuración mixta no es compatible con 64 bits modo (a partir de Visual Studio 2008).

+0

¿Podría publicar algún artículo que pueda tener sobre este tema? – Kyle

Cuestiones relacionadas