2011-05-23 12 views
8

Tengo un componente C# .NET al que se llama desde un exe ActiveX COM fuera de proceso.¿Cómo puedo depurar una excepción no controlada en el código administrado cuando se llama desde COM?

Puedo iniciar el depurador en Visual Studio 2005 ejecutándose en mi exe COM que llama a mi componente .NET. Los puntos de interrupción funcionan pero no es posible interrumpir una excepción no controlada de "Conjunto de referencias de objeto". He intentado lo siguiente en vano:

  • han comprobado todas las excepciones CLR de las excepciones VS de diálogo
  • habilitado "descanso cuando excepciones cruzan dominio de aplicación o los límites administrados/nativos"
  • permitió código no administrado la depuración mi Projecy
  • discapacitados "Sólo mi código" depuración
+1

Cuando marcó todas las excepciones de CLR en el cuadro de diálogo Excepciones de VS, ¿utilizó la columna de usuario no administrado o la columna lanzada? Es solo una suposición, pero sospecho que el código de interoperabilidad COM/Managed manejaría excepciones, por lo que podría convertirlos en valores HRESULT adecuados. –

+0

He comprobado tanto el usuario no administrado como el lanzado. Creo que tienes razón Frank: COM está manejando las excepciones. Encontré este http://blogs.msdn.com/b/oldnewthing/archive/2011/01/20/10117963.aspx pero no estoy seguro de cómo configurar IGlobalOptions – tukushan

Respuesta

3

Lo que normalmente hago es agregar una llamada al System.Diagnostics.Debugger.Launch; en el punto de entrada de mi código administrado. Esto iniciará el depurador si el programa no está ya activamente en modo de depuración. Tenga en cuenta que tendrá que eliminar esta línea después de que termine la depuración, ya que no desea mantener una llamada para iniciar el depurador en la versión de lanzamiento.

+0

¡Esto funcionó! Reveló que me estaba uniendo al proceso equivocado.Me estaba uniendo al padre del componente COM que llamaba a mi código administrado y debería haber estado adjuntando al mismo EXE COM ActiveX. – tukushan

1

en lugar de ejecutar su programación con F5, puede ejecutar el programa no administrado y luego agregar a dicho informe:

Para Visual Studio 2005:

  • Run (no de depuración) el proyecto no administrado de Visual Studio con Ctrl+F5
  • Abra la "Asociar al proceso" de diálogo: depuración ->Asociar al proceso. ..
  • Haga clic en el Adjuntar a: selección de botones: Seleccionar ...
  • Elija: depuración estos tipos de códigos:
  • Compruebe los siguientes puntos: administrados, nativo
  • Haga clic OK
  • Elija su proceso de Procesos disponibles
  • Haga clic en Adjuntar

Esto debería permitir la depuración administrada y no administrada en un proceso no administrado. Ahora puede establecer puntos de interrupción o atrapar excepciones de primera oportunidad en el código administrado, suponiendo que tiene símbolos.

Cuestiones relacionadas