2012-05-03 15 views
7

Possiedo un software multilivello costituito da due applicazioni (GUI, DataSnap Server). La mia applicazione server DataSnap ha un bug che si verifica in EAccessViolation in alcune volte. questo:Come ottenere lo stack completo delle chiamate nell'applicazione server Delphi

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

Voglio ottenere pieno Stack di chiamate e registrarlo nel file. anche io uso eurekalog ma è efficace solo per l'applicazione GUI.

risposta

9

EurekaLog è estremamente efficace per tutte le applicazioni. Basta configurarlo in modo che registri le eccezioni su un file e non visualizzi affatto finestre di dialogo delle eccezioni.

+6

+1 ma "efficace" non è completamente corretto, più simile a "estremamente efficace" (: – ComputerSaysNo

+1

corretto come suggerito :) – Harriv

0

Sto usando MemCheck prima di rendere stack di chiamate, ma non sono sicuro che funziona ancora con le versioni di Delphi più recenti.

7

Il nostro Open-Source logging classes dispone di un'intercettazione di eccezione con stack di chiamate completo, comprese le righe del codice sorgente.

Le informazioni di debug sono molto compresse (meglio di zip o altri formati), facoltativamente in exe.

Open Source, funziona con Delphi 5 fino a XE2.

Nella sua versione più recente (utilizzare quella da the source code repository, ovvero 1,16 corrente), è anche in grado di registrare eccezioni all'interno di librerie (ad esempio all'interno di .dll o .bpl), come esplicitamente la richiesta.

Ci sono altre funzionalità, come la profilazione lato cliente, che può aiutare il supporto clienti e miglioramenti delle applicazioni, dai dati reali (non solo nei banchi prova).

+0

Wow Arnaud! Le tue cose continuano a migliorare sempre di più! – lkessler

+0

Se lo consigliamo come soluzione, sarebbe bello avere almeno un minimo esempio di codice, come aggiungere/attivare tale intercettatore di eccezioni ecc. Per le librerie specializzate è sufficiente solitamente aggiungere unità al progetto, ma non in questo caso suppongo. La compressione del file MAP non riesce sul file 36Mb (alcuni buffer interni di dimensioni fisse sono troppo piccoli, dovrebbe essere calcolato da filesize probabilmente). –

+0

@AndreiGalatyn Il problema con un enorme file .map è stato risolto ieri. E puoi trovare esempi su https://github.com/synopse/mORMot/tree/master/SQLite3/Samples/11%20-%20Exception%20logging –

Problemi correlati