2012-05-03 53 views
7

Mam wielowarstwowe oprogramowanie, które jest dwiema aplikacjami (GUI, serwer DataSnap). Aplikacja mojego serwera DataSnap ma przyczynę błędu, która występuje czasami w wyniku naruszenia usługi e-mail. takie:Jak uzyskać pełny stos połączeń w aplikacji serwera Delphi

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

Chcę uzyskać pełny stos połączeń i zaloguj się do pliku. również używam eurekalog, ale jest to skuteczne tylko dla aplikacji GUI.

Odpowiedz

9

EurekaLog jest niezwykle skuteczny we wszystkich aplikacjach. Po prostu skonfiguruj go tak, aby logował wyjątki do pliku i nie wyświetlał w ogóle okien dialogowych wyjątków.

+6

+1 ale "skuteczne" nie jest w pełni poprawne, bardziej jak "niezwykle skuteczne" (: – ComputerSaysNo

+1

Naprawiono zgodnie z sugestią :) – Harriv

0

Używam MemCheck przed renderowanie stosy połączeń, ale nie jestem pewien, nadal działa z najnowszymi wersjami Delphi.

7

Nasz Open-Source logging classes ma przechwytywacz wyjątków z pełnym stosem wywołań, w tym linie kodu źródłowego.

Informacje na temat debugowania są bardzo skompresowane (lepiej niż zip lub inne formaty), opcjonalnie do pliku exe.

Open Source, współpracuje z Delphi 5 do XE2.

W swojej najnowszej wersji (użyj tej z the source code repository - tj. Obecnie 1,16), jest również w stanie rejestrować wyjątki w bibliotekach (tj. W .dll lub .bpl), jak wyraźnie określa twoje żądanie.

Istnieją inne funkcje, takie jak profilowanie po stronie klienta, które może pomóc w obsłudze klienta i ulepszeniom aplikacji z prawdziwych danych (nie tylko w zestawach testowych).

+0

Wow Arnaud! Twoje rzeczy stają się coraz lepsze! – lkessler

+0

Jeśli polecisz to jako rozwiązanie, byłoby miło mieć przynajmniej minimalny przykład kodu, jak dodać/aktywować taki przechwytywacz wyjątków itp. W przypadku bibliotek specjalistycznych zwykle wystarczy dodać jednostkę do projektu, ale nie w tym przypadku zgaduję. Kompresja pliku MAP kończy się niepowodzeniem w przypadku pliku 36 MB (niektóre wewnętrzne bufory o stałym rozmiarze są zbyt małe, należy je wyliczyć najprawdopodobniej z pliku). –

+0

@AndreiGalatyn Problem z ogromnym plikiem .map został naprawiony wczoraj. I możesz znaleźć próbki na https://github.com/synopse/mORMot/tree/master/SQLite3/Samples/11%20-%20Exception%20logging –

Powiązane problemy