Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi EurekaLog + TCSIdCriticalSection (https://www.delphipraxis.net/162313-eurekalog-tcsidcriticalsection.html)

stahli 17. Aug 2011 08:51

EurekaLog + TCSIdCriticalSection
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo alle,

ich habe mir gestern mal die EurekaLog-Trial geladen und bin ja begeistert. So konnte ich auf Anhieb einen Fehler eingrenzen, der auf einem Fremdrechner auftrat und den ich sonst wohl wochenlang hätte suchen müssen...

Also ich denke, das Tool ist mal einen Blick wert. :thumb:
http://www.eurekalog.com/index_delphi.php

Eine Frage:
In einer Unit zeigt mir EurekaLog ein Speicherleck.
Im Bild habe ich mal testweise zwei weitere Lecks erzeugt um den Ort einzuschränken. Dieser ist entweder auf finalization (normalerweise) oder auf end (wenn ich finalization entferne).
Ich habe nachts 3 Uhr dann aufgegeben und nur noch festgestellt, dass es an einer benutzten Unit und TCSIdCriticalSection liegen muss.
Kann jemand so schon näheres sagen?

FastMM hat nix bemeckert.

ehX 17. Aug 2011 09:40

AW: EurekaLog + TCSIdCriticalSection
 
Vielleicht ist das ein Hinweis:

Zitat:

The Indy components have the compiler directive IDFREEONFINAL which
normally is not defined.

If it is defined the objects IdStack and IdThread should be freed on
finalization otherwise not.
Quelle: hier

ehX 17. Aug 2011 09:52

AW: EurekaLog + TCSIdCriticalSection
 
Ich habe hier gerade etwas getestet:
Es scheint so, dass EurekaLog die Leaks der Indy-Unit "TCSIdCriticalSection" nicht als "Borland-Leak" erkennt, andere Leaks von anderen Indy-Units jedoch schon.

Mein Test:
Einfach mal die Unit "IdFTP" eingebunden und in EurekaLog die "Leak Detection" eingeschaltet => kein Leak wird beim Beenden des Programms reported.
Dann habe ich in den EurekaLog Options den Haken von "Hide Borland Leaks" entfernt und nochmal getestet => Leak in Unit "IdStack" wird am Ende reported.

Meiner Meinung nach sieht das so aus, dass Indy generell ein paar Leaks in der Initialization-Phase hat, Eurekalog aber einige bekannte Leaks in Indy ausblendet, wenn man "Hide Borland Leaks" eingeschaltet hat, jedoch nicht alle, und zu denen gehören wohl die Leaks in der Unit "TCSIdCriticalSection".

stahli 17. Aug 2011 10:01

AW: EurekaLog + TCSIdCriticalSection
 
Hmm, Indys setze ich nicht ein.

Folgende Units werden genutzt:
Delphi-Quellcode:
unit od_prop;

interface

uses
  Classes, Contnrs, od, Generics.Collections;

...

implementation

uses
  Windows, Math, SysUtils, RTTI, TypInfo;
Muss ich heute Abend mal schauen.

EDIT: Danke für den Tip mit "Hide Borland Leaks"!


Was mir noch eingefallen ist: Es wäre nett, wenn EurekaLog gleich noch eine Reportmöglichkeit implementieren würde:
Eureka.Send('MyInfoA');
Eureka.Send('MyInfoB');
So könnte man sich bei einer Fehlersuche gleich noch ein paar zusätzliche Infos und Werte übermitteln.

Gibt es das (und ich habe es gestern noch nicht entdeckt) oder ist da etwas geplant?

ibp 17. Aug 2011 10:04

AW: EurekaLog + TCSIdCriticalSection
 
ich nutze auch Eurekalog, ich nutze das Feature zwar nicht aber du kannst auch eigene interne Werte mit dem Fehlerprotokoll verschicken. Schau mal in der Doku nach oder im Forum.

Sherlock 17. Aug 2011 10:11

AW: EurekaLog + TCSIdCriticalSection
 
Ja, EurekaLog ist echt ein feines Tool. Hat mir gerade geholfen eine Endlosschleife zu identifizieren.

Sherlock

ehX 17. Aug 2011 10:26

AW: EurekaLog + TCSIdCriticalSection
 
Zitat:

Gibt es das (und ich habe es gestern noch nicht entdeckt) oder ist da etwas geplant?
Gibt es. Ich mache das meistens so, dass ich mir beim Auftreten einer Exception ein eigenes, kleines Log schreibe, das dann mitgesendet wird:

1) TEurekaLog-Komponente auf die Form werfen
2) OnExceptionNotify zuweisen, in dieser Routine dann einfach ein kleines Log schreiben, in dieses kannst du alles schreiben, was du wissen willst (Var-Dumping, Zusatzinfos etc.)
3) In den EurekaLog-Optionen unter "Send Options" bei "Attached File" den Pfad zu deiner Logdatei angeben, du du im ExceptionNotify-Handler schreibst.

Wenn nun eine Exception auftritt, wird der "OnExceptionNotify"-Handler aufgerufen, darin schreibst du deine Log-Datei. Wenn nun den Kunde den Report absendet, wird die Log-Datei wie unter den Send-Optionen angegeben mit in den Report gepackt, gezippt und mitversendet.

Sehr praktisch ist auch, das ganze gleich direkt in ein Bugtracking System senden zu lassen, z.B. sendet mein EurekaLog direkt ins Mantis.


Edit:
Der OnExceptionNotify-Handler ist auch insofern praktisch, da du dort mit "Handled := true" globale Exceptions auch selbst abfangen kannst, ohne den EurekaLog-Fehlerdialog anzuzeigen.

stahli 23. Aug 2011 09:54

AW: EurekaLog + TCSIdCriticalSection
 
Das Problem liegt in der RTTI-Unit (XE).
HideBorlandLeaks hilft bei mir nicht weiter.

Kann noch jemand etwas beitragen? Offenbar existiert ein Problem in den RTTI. Muss sonst mal noch versuchen, das näher einzugrenzen.

ehX 23. Aug 2011 11:12

AW: EurekaLog + TCSIdCriticalSection
 
Ich habe leider kein Delphi XE, um es testen zu können.
Kann ich das mit 2009 oder 2006 auch irgendwie reproduzieren? Dann schau ich mir das gerne mal genauer an.

stahli 23. Aug 2011 11:17

AW: EurekaLog + TCSIdCriticalSection
 
Wohl nicht. Die RTTI-Funktionen sind ja neu seit D2010.
Ich werde das heute Abend mal versuchen, einzugrenzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz