2008-11-02 9 views
7

Si no se usa un generador de perfiles, ¿hay alguna forma de detectar excepciones en la primera oportunidad dentro de un programa en ejecución? Idealmente, me gustaría registrar información de estado más detallada que no está disponible una vez que el bloque catch se ha hecho cargo de la excepción final.¿Hay alguna manera de registrar o interceptar Excepciones de primera oportunidad

+0

¿Qué información es que pierdes? – pipTheGeek

+0

Feliz de ser corregido: si no maneja todas las excepciones en cada método y se asegura de que todas las variables estén definidas fuera del bloque try-catch, en el punto en que se produce la excepción final, no tendrá acceso a todas las variables que estaban disponibles en el contexto de ejecución de la excepción original. –

Respuesta

2

Creo que la única forma en que puede obtener esa información en .NET es utilizando un depurador.

De lo contrario, tendrá que desarrollar una solución para guardar el estado de una pila y tener una manera especial de registrar excepciones. Básicamente harías las mismas cosas que hace un generador de perfiles de memoria, realiza un seguimiento de las instancias que se crean. Sin embargo, esto sería un gran golpe de rendimiento a menos que limite la cantidad de información que está registrando.

Una mejor solución sería usar las capacidades Trace y Assert en el espacio de nombres System.Diagnostics para rastrear selectivamente el estado del programa, o utilizar un recurso de registro (log4net, EnterpriseLibrary, NLog, rodar uno propio) para volcar hilo/pila/información variable sobre la marcha.

En cualquier caso, agregar toda esta información adicional es una gran sobrecarga.

EDIT: Tengo noticias de este proyecto en mi feed: NTrace. Parece que encajará un poco más de lo que estás tratando de hacer.

1

Use Adplus. Conectará un depurador al proceso y generará (de forma predeterminada) un pequeño minivolcado cuando se produzcan excitaciones de primera oportunidad. El archivo de registro generado Adplus también contendrá información de excepción. Solo asegúrate de que tienes PDB disponible para ver la información completa de calstack.

16

yo estaba buscando en Google FirstChanceException, y no me resisto a responder a esta más de dos años después ...

Ahora, en .net 4.0, se puede coger el FirstChanceException event del dominio de aplicación. Es solo un evento, por lo que no puede manejar el error, pero parece ser una forma buena y central de obtener información sobre excepciones, ya sea que se manejen o no. El evento FirstChanceException se lanza antes de que se permita que un bloque catch lo maneje. No he encontrado mucha información al respecto, pero aparte de la documentación de Microsoft, una de las mejores fuentes es Mitch Sellers Blog.

+0

Ojalá hubiera una manera de hacerlo en .net 3.5. Tengo un proceso 3.5 en producción y algo así como 'FirstChanceException' en 3.5 podría ayudarme a rastrear un problema de desconexión ... –

Cuestiones relacionadas