AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStringlist Quellcode verändern

Ein Thema von DevLinus · begonnen am 19. Jun 2017 · letzter Beitrag vom 21. Jun 2017
Antwort Antwort
Seite 1 von 3  1 23      
DevLinus

Registriert seit: 25. Apr 2017
26 Beiträge
 
Delphi 10 Seattle Professional
 
#1

TStringlist Quellcode verändern

  Alt 19. Jun 2017, 08:05
Delphi-Version: 10 Seattle
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!
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#2

AW: TStringlist Quellcode verändern

  Alt 19. Jun 2017, 08:07
Zitat:
Leider wird die eingebaute Änderung nicht mit Compiliert.
Hier kann vermutlich keiner aus Kaffeesatz lesen daher... wie sieht die Änderung denn aus?
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: TStringlist Quellcode verändern

  Alt 19. Jun 2017, 08:12
Zitat:
Leider wird die eingebaute Änderung nicht mit Compiliert.
Hier kann vermutlich keiner aus Kaffeesatz lesen daher... wie sieht die Änderung denn aus?
Das Problem ist wohl eher, dass die System Units nicht mehr neu kompiliert werden. Eventuell reicht es, wenn du die Debug DCUs mal neu erzeugen lässt. Schau dir dazu mal die Compilerschalter an.
  Mit Zitat antworten Zitat
DevLinus

Registriert seit: 25. Apr 2017
26 Beiträge
 
Delphi 10 Seattle Professional
 
#4

AW: TStringlist Quellcode verändern

  Alt 19. Jun 2017, 08:19
Zitat:
Leider wird die eingebaute Änderung nicht mit Compiliert.
Hier kann vermutlich keiner aus Kaffeesatz lesen daher... wie sieht die Änderung denn aus?
Das Problem ist wohl eher, dass die System Units nicht mehr neu kompiliert werden. Eventuell reicht es, wenn du die Debug DCUs mal neu erzeugen lässt. Schau dir dazu mal die Compilerschalter an.
Genau welchen Compilerschalter meinst du? Ich habe bei Debuggen "Mit Debug- DCUs angemacht" Jetzt habe ich da wenigstens Haltepunkte in der Unit.
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#5

AW: TStringlist Quellcode verändern

  Alt 19. Jun 2017, 08:22
Zitat:
Das Problem ist wohl eher, dass die System Units nicht mehr neu kompiliert werden.
An den System-Units würde ich gar nicht erst rumfummeln.

Zitat:
würde ich gerne die TStringlist so anpassen das sie beim Create eine ID gesetzt bekommt
Ich würde das einfach so machen...

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;

Geändert von SneakyBagels (19. Jun 2017 um 08:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman
Online

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
 
Delphi 12 Athens
 
#6

AW: TStringlist Quellcode verändern

  Alt 19. Jun 2017, 08:26
Moin...
An dieser Stelle wieder mal die üblichen Verdächtigen.

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.

...Versuch macht klug. Besser als in den System Units herumpfuschen.

Geändert von haentschman (19. Jun 2017 um 08:29 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: TStringlist Quellcode verändern

  Alt 19. Jun 2017, 08:27
Zitat:
würde ich gerne die TStringlist so anpassen das sie beim Create eine ID gesetzt bekommt
Ich würde das einfach so machen...
Hätte ich auch fast vogeschlagen. Aber dann müsste er sich eine neue Unit machen und die überall einbinden. Könnte bei 350 Units etwas Arbeit bedeuten.

@TE: Erzeuge mal das Projekt neu. Nicht nur kompilieren. Der Schalter ist zumindest der den ich meinte.
  Mit Zitat antworten Zitat
DevLinus

Registriert seit: 25. Apr 2017
26 Beiträge
 
Delphi 10 Seattle Professional
 
#8

AW: TStringlist Quellcode verändern

  Alt 19. Jun 2017, 08:29
Zitat:
Das Problem ist wohl eher, dass die System Units nicht mehr neu kompiliert werden.
An den System-Units würde ich gar nicht erst rumfummeln.

Zitat:
würde ich gerne die TStringlist so anpassen das sie beim Create eine ID gesetzt bekommt
Ich würde das einfach so machen...

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
 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;
Prinzipiell stimme ich dir vollkommen zu. Das Problem ist in dem Projekt werden fast 3 Millionen Zeilen Code mit ein Compiliert und Tausende Stringlisten verwendet. Wenn ich die alle durch meine austauschen soll werde ich diesen Monat nicht mehr fertig.
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#9

AW: TStringlist Quellcode verändern

  Alt 19. Jun 2017, 08:29
Zitat:
Könnte bei 350 Units etwas Arbeit bedeuten.
Bei einem 350-Units-Projekt sollte nach Möglichkeit irgendeine Unit vorhanden sein, wo man solchen kram reinschreibt

Zitat:
Wenn ich die alle durch meine austauschen soll werde ich diesen Monat nicht mehr fertig.
Was meint du mit austauschen? Hier müsstest du nichts austauschen sondern einfach nur den Kontruktor überschreiben. Der Typ der Stringliste bleibt gleich.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#10

AW: TStringlist Quellcode verändern

  Alt 19. Jun 2017, 08:31
Ich würde es so versuchen: eine eigene Unit mit einer Cracker-Klasse erstellen.
Delphi-Quellcode:
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.
Und diese Unit überall dort, wo die Stringlisten benutzt werden, als letzte in der uses-Klausel des interface-Abschnitts einfügen. Ungetestet!
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz