2012-05-03 11 views
7

Tengo un software de varios niveles que tiene dos aplicaciones (GUI, servidor DataSnap). Mi aplicación de servidor DataSnap tiene una causa de error. EAccessViolation en Algunas veces. tal esto:Cómo obtener la pila completa de llamadas en la aplicación del servidor Delphi

Exception EAccessViolation in module unidac160.bpl at 00010CB1. 
Access Violation at 002B77832 in module unidac160.bpl. Read of address 0000000C 

Quiero obtener el pleno Pila de llamadas y registrar que en el expediente. también uso eurekalog pero es efectivo solo para la aplicación de GUI.

Respuesta

9

EurekaLog es extremadamente eficaz para todas las aplicaciones. Simplemente configúrelo para que registre las excepciones en un archivo y no muestre ningún diálogo de excepción.

+6

+1 pero "efectivo" no es del todo correcto, es más parecido a "extremadamente efectivo" (: – ComputerSaysNo

+1

Solucionado como sugirió :) – Harriv

0

He estado usando MemCheck antes de hacer pilas de llamadas, pero no estoy seguro de que todavía funciona con las versiones más recientes de Delphi.

7

Nuestro Open-Source logging classes tiene un interceptor de excepción con pila de llamadas completa, incluidas las líneas de código fuente.

La información de depuración está muy comprimida (mejor que zip o cualquier otro formato), opcionalmente en el exe.

Código abierto, funciona con Delphi 5 hasta XE2.

En su última versión (use la de the source code repository - es decir, actualmente 1.16), también puede registrar excepciones dentro de las bibliotecas (es decir, dentro de .dll o .bpl), como lo indica explícitamente su solicitud.

Existen otras funciones, como la creación de perfiles del lado del cliente, que pueden ayudar a su atención al cliente y a mejorar las aplicaciones, a partir de datos reales (no solo en bancos de pruebas).

+0

Wow Arnaud! ¡Tus cosas se ponen cada vez mejor! – lkessler

+0

Si lo recomienda como solución, sería bueno tener al menos un ejemplo mínimo de código, cómo agregar/activar dicho interceptor de excepción, etc. Para bibliotecas especializadas, por lo general es suficiente agregar una unidad al proyecto, pero no en este caso supongo. La compresión del archivo MAP falla en el archivo de 36Mb (algunos archivos de almacenamiento interno de tamaño fijo son demasiado pequeños, probablemente se calculen a partir del tamaño del archivo). –

+0

@AndreiGalatyn El problema con el gran archivo .map se ha solucionado ayer. Y puede encontrar muestras en https://github.com/synopse/mORMot/tree/master/SQLite3/Samples/11%20-%20Exception%20logging –

Cuestiones relacionadas