![]() |
Delphi-Version: 10 Seattle
TStringlist Quellcode verändern
Guten Morgen,
ich versuche gerade Memleaks aus einem Programm raus zubekommen. Ich war jetzt schon ziemlich erfolgreich habe aber noch 2 Stringlisten die nicht gefreet werden. Da das Programm extrem viele initialization und class Constructoren (Mehr als 350) besitzt würde ich gerne die TStringlist so anpassen das sie beim Create eine ID gesetzt bekommt und die ID in meinen Logger rein schreibt und im Destroy die ID des Objektes auch in den Logger reinschreibt damit ich weiß welche Stringlist mit jeweiliger ID nicht frei gegeben wird. Leider wird die eingebaute Änderung nicht mit Compiliert. Ist dies Möglich? Wenn ja, wie? Danke! |
AW: TStringlist Quellcode verändern
Zitat:
|
AW: TStringlist Quellcode verändern
Zitat:
|
AW: TStringlist Quellcode verändern
Zitat:
|
AW: TStringlist Quellcode verändern
Zitat:
Zitat:
Delphi-Quellcode:
// Das hier alles kommt ins eigene Projekt - nicht in die System-Units
type TStringList = class(System.Classes.TStringList) public ID: Integer; // <= ID erweitern constructor Create; overload; end; // Konstruktor constructor TStringList.Create; begin ID := Random(1234567890) + 1; // ID setzen (nach Möglichkeit irgendeinen besseren Algorithmus) inherited Create; end; // Test procedure TForm2.Button9Click(Sender: TObject); var sl1, sl2: TStringList; begin sl1 := TStringList.Create; sl2 := TStringList.Create; ShowMessage('SL1-ID: ' + IntToStr(sl1.ID)); ShowMessage('SL2-ID: ' + IntToStr(sl2.ID)); sl1.Free; sl2.Free; end; |
AW: TStringlist Quellcode verändern
Moin...:P
An dieser Stelle wieder mal die üblichen Verdächtigen. 8-) 1: FastMM 2: MadExcept Übersichtlicher ist imho der MadExcept. Der zeigt beim Progammende (mit Ressource Leaks) die Stellen an. Manchmal ist auch der bei komischen Konstellationen, wie Alle anderen auch, überfordert. :cry: ...Versuch macht klug. Besser als in den System Units herumpfuschen. :P |
AW: TStringlist Quellcode verändern
Zitat:
@TE: Erzeuge mal das Projekt neu. Nicht nur kompilieren. Der Schalter ist zumindest der den ich meinte. |
AW: TStringlist Quellcode verändern
Zitat:
|
AW: TStringlist Quellcode verändern
Zitat:
Zitat:
|
AW: TStringlist Quellcode verändern
Ich würde es so versuchen: eine eigene Unit mit einer Cracker-Klasse erstellen.
Delphi-Quellcode:
Und diese Unit überall dort, wo die Stringlisten benutzt werden, als letzte in der uses-Klausel des interface-Abschnitts einfügen. Ungetestet!
unit StringlistCracker;
interface uses System.Classes; type TStringList = class(System.Classes.TStringList) private FID: integer; procedure Log; class var FInstanceCount: integer; public constructor Create; destructor Destroy; override; property ID: integer read FID; end; implementation constructor TStringList.Create; begin inherited; inc(FInstanceCount); FID := FInstanceCount; end; destructor TStringList.Destroy; begin Log; inherited; end; procedure TStringList.Log; begin // Hier jetzt den Logging-Code end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 Uhr. |
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