2011-01-07 16 views
5

En una aplicación delphi 2007, hemos utilizado madExcept para manejar las excepciones para nosotros. Usamos el diálogo estándar, permitiendo que el usuario nos envíe un informe con el correo si así lo desea.madExcept, obteniendo la parte superior de la pila actual

Queremos agregar un poco a esta funcionalidad. Si el usuario elige no enviar un informe completo, aún queremos registrar la excepción en un archivo, pero no un informe completo. Queremos la clase y el mensaje de excepción, y el archivo fuente y el número de línea.

Los dos primeros son fáciles, pero no puedo encontrar una manera directa de encontrar el último.

Tengo el informe de excepción completo en la forma de una interfaz IMEException. Por lo que puedo ver, la pila de llamadas está disponible solo a través de la propiedad BugReportSections, que me da la pila en texto sin formato.

En madStackTrace.pas, hay una función StackTrace() que debería darme lo que quiero. Se necesita una gran cantidad de parámetros, y la documentación es un poco corto en la información ..

Pregunta: ¿Alguien sabe los parámetros adecuados para alimentar StackTrace(), de modo que sólo la vuelta el artículo superior de la pila de el hilo donde se lanzó la excepción?

Respuesta

5

madStackTrace.pas tiene otra función, StackAddrToStr que solo toma una sola dirección y devuelve el texto formateado para ella. Si se encuentra en el bloque except del hilo que se cuelga, puede pasarle la variable global ExceptAddr. Si está en una de las llamadas de retorno de llamada locas, use `IMEException.ExceptAddr 'en su lugar.

+0

Todavía devolviendo una cadena, pero esta me lleva a GetMapFileInfos() de madMapFile.pas, que puede darme lo que quiero. – Vegar

+0

Creo que puedo haber encontrado lo que necesito para StackTrace, aunque: 'StackTrace (verdadero, falso, falso, @stack, excepción.ExceptoAddr, verdadero, falso);' – Vegar

+0

@ Veg si está funcionando, esta respuesta debe ser aceptada – mjn

Cuestiones relacionadas