¿Cómo adjuntar un depurador para acceder al código nativo (C++) desde un contenedor administrado (C#)?

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

Pregunta

Tengo un contenedor alrededor de una llamada de función de C++ que llamo desde el código C#.¿Cómo adjunto un depurador en Visual Studio para acceder al código nativo de C++?

Este es el contenedor que tengo que llama a GetData() definido en un archivo C++:

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

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

Gracias Nikhil

¿Fue útil?

Solución

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

Si su DLL no administrada se está compilando a partir de otro proyecto (durante un tiempo, el nuestro se construyó usando VS6), solo asegúrese de tener el archivo pdb de la DLL a mano para la depuración.

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

Otros consejos

Además del consejo 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 eligiendo tanto 'código administrado' como ' código nativo'.

La depuración de esta manera se denomina depuración en modo mixto.Mira esto entrada en el blog para algunos consejos.

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

Para cualquiera que use WinDbg:

1>Símbolos de configuración

Mira estos comandos.(Ayuda:en consola .hh <comando>)

.sympath
.sympath+ 
.symfix

2>Configurar ruta de origen

.srcpath

3>Cargue la extensión SOS para depurar programas en modo administrado/mixto.

(Asegúrese de tener la ruta de extensión configurada correctamente)

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

.extpath 

Establezca un punto de interrupción para que se cargue clr.

sxe ld:mscorwks

(F5 / g) (espere a Modload BP en MSCORWKS.DLL)

Asegúrese de no tener ya cargada una extensión sos duplicada.Ver:

.chain

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

.loadby sos mscorwks

4> Recarga todos los símbolos..

.reload

Ahora ya está todo listo :)

(MMV)

La depuración mixta no se admite en el modo de 64 bits (a partir de Visual Studio 2008).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top