2009-11-16 29 views
31

Tengo un archivo DLL que se escribió en C++ y llama desde una aplicación de C#. El DLL es un código no administrado.No puede depurar no administrado DLL desde C#

Si copio los DLL y sus .pdb archivos con un evento posterior a la acumulación de ejecución de depuración de la aplicación de C#dir Todavía no puedo golpear a cualquiera de los puntos de quiebre he puesto en el código DLL. El punto de interrupción tiene un mensaje adjunto que dice que "no se han cargado símbolos para este documento".

¿Qué más tengo que hacer para conseguir la depuración en la fuente dll?

tengo "Tools ->Options ->Debugging ->General ->Enable solamente mi código" personas de movilidad reducida. El DLL está siendo compilado con "seguimiento en tiempo de ejecución y optimizaciones desactivar (/) ASSEMBLYDEBUG" y generar información de depuración en "Yes (/ DEBUG)"

Respuesta

55

para depurar en su C++ DLL que necesita para habilitar la depuración en modo mixto en la aplicación de inicio en su solución.

  • Haga clic derecho sobre el proyecto - > Propiedades
  • Ir a la depuración Tab
  • de verificación "Activar depuración de código no administrado"

Esto le permitirá depurar en código nativo para un escenario de estilo F5 . Si desea activarlo para unirse al proceso y luego hacer lo siguiente en el "asociar al proceso" de diálogo

  • Seleccione el proceso para depurar
  • Haga clic en el botón "Seleccionar ..." por encima del proceso lista
  • Haga clic en "Depurar estos tipos de códigos"
  • Comprobar tanto administrado y nativo
+0

Mientras que iba a responder a esto, yo no estaba' Asegúrese de si fue tan simple o no. Si es así de simple, probablemente siempre lo haya usado mal al intentar depurar el código administrado de C++ que interactúa con el código nativo. –

+2

Tenga en cuenta que si su proyecto de inicio utiliza otro proyecto C# DLL que realmente llama a la DLL de C++, el proyecto de inicio también debe tener activada la opción "Habilitar la depuración de código no administrado". –

+2

Seleccione la solución en el Explorador de soluciones. Seleccione desde> Menú | Herramientas | opciones | Depuración | General y desmarque "Requerir archivos fuente para que coincida exactamente con la versión original" – Martin

4

Necesita habilitar la depuración no administrada (Nativo).

Si va a conectar con el proceso después de que se inicia:

Ir al menú Herramientas y, a continuación, conectar con el proceso, asegúrese de que tiene habilitada la depuración nativa.

verá un cuadro de edición de sólo lectura:

adjuntar a: El código administrado, el código nativo [Seleccione]

Asegúrese de que el código nativo está en la lista. Si no lo agregas.

Si usted está comenzando su proyecto desde dentro de Visual Studio:

En las propiedades del proyecto que se va a iniciar en modo de depuración. Vaya a Propiedades del proyecto, y luego seleccione la pestaña de depuración.

asegurarse de que esta casilla de verificación se comprueba en:

Habilitar la depuración de código no administrado

1

Cuando se conecta a un proceso de depurar, tiene que especificar cómo desea adjuntar. Tiene algunas opciones, a saber, Administrado y Nativo. Para depurar el código C# con C++ no administrado, debe adjuntarlo a un proceso como Administrado y como Nativo (ambos se pueden seleccionar al mismo tiempo).

0

que se habían enfrentado el mismo problema e hizo todo lo que se sugiere en la respuesta aceptada, pero los puntos de interrupción en el archivo DLL no administrado no era getti ng hit!

Sin embargo, cuando hice lo siguiente finalmente pude depurar el dll!

Seleccionar solución en el Explorador de soluciones
Seleccionar en la lista | Herramientas | Opciones | Depuración | general
Desactive la opción "Requerir archivos de origen para coincidir exactamente con la versión original"

Cuestiones relacionadas