TObject durch eigénes TObject ersetzen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Nimral
Beiträge: 381
Registriert: Mi 10. Jun 2015, 11:33

TObject durch eigénes TObject ersetzen

Beitrag von Nimral »

Mal wieder eine seltsame Frage, geboren aus einem Problem.

Ich habe eine ziemlich umfangreiche Multitasking-App. Irgendwo habe ich 28 Bytes verloren. Das Programm stört das nicht wirklich, außer natürlich ich beende es im Debug-Modus, dann gibt es Mecker vom HeapTrc.

Ich suche jetzt schon Tage nach dem Problem, und finde es nicht.

Dann hatte ich folgende Idee, die als Testaufbau funktioniert: ich ersetze TObject durch ein eigenes TObject, welches mitschreibt was created und destroyed wird, und welches das ursprüngliche TObject kapselt:

Code: Alles auswählen

unit Unit1;

{$mode ObjFPC}{$H+}

interface

uses
  Classes, SysUtils;

type
  { TObject }
  TObject = class(System.TObject)
  public
    constructor Create;
    destructor Destroy; override;
  end;

implementation

{ TObject }
constructor TObject.Create;
begin
  inherited Create;
  writeln('Object created: ' + self.ClassName);
end;

destructor TObject.Destroy;
begin
  writeln('Object destroyed: ' + self.ClassName);
  inherited Destroy;
end;
end. 

Code: Alles auswählen

program Project1;

uses
  Unit1;

type
  TTestObject = class(TObject)
  end;

var
  TC: TTestObject;

begin
  TC := TTestObject.Create;
  TC.Free;
  Readln;
end. 
Ich finde im Moment kein Haar in der Suppe, als Testaufbau klappt das, tut das so wie ich es mir vorstelle, oder habe ich etwas übersehen?

Armin.

wp_xyz
Beiträge: 4262
Registriert: Fr 8. Apr 2011, 09:01

Re: TObject durch eigénes TObject ersetzen

Beitrag von wp_xyz »

Weiß nicht... Speicherlecks durch Strings/dynamische Arrays/manuelle Speicheranforderung findest du so nicht. Und die ewig lange Logdatei musst du erst mal verarbeiten. Und das wesentliche, die Zeilennummern, erhältst du auch nicht. Was passt denn an HeapTrc nicht?

Nimral
Beiträge: 381
Registriert: Mi 10. Jun 2015, 11:33

Re: TObject durch eigénes TObject ersetzen

Beitrag von Nimral »

HeapTrc - der sonst eigentlich oft wertvolle Hinweise gibt - haut mir in diesem Fall in den obersten Tabellenzeilen nur Adressen ohne Zeilennummern ins Gesicht.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1079
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: TObject durch eigénes TObject ersetzen

Beitrag von fliegermichl »

Nimral hat geschrieben:
Mi 9. Feb 2022, 09:12
HeapTrc - der sonst eigentlich oft wertvolle Hinweise gibt - haut mir in diesem Fall in den obersten Tabellenzeilen nur Adressen ohne Zeilennummern ins Gesicht.
In den obersten Zeilen ja. Aber die erste Zeile, die einen Prozedurnamen hat, ist die Stelle wo der Speicher reserviert wurde.

Michl
Beiträge: 2500
Registriert: Di 19. Jun 2012, 12:54

Re: TObject durch eigénes TObject ersetzen

Beitrag von Michl »

Nimral hat geschrieben:
Di 8. Feb 2022, 23:39
Ich suche jetzt schon Tage nach dem Problem, und finde es nicht.
Hast du alle Debugger Checks an?

Wenn das nichts bringt, hilft mir meistens die Fehlersuche per Reduktion.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

wp_xyz
Beiträge: 4262
Registriert: Fr 8. Apr 2011, 09:01

Re: TObject durch eigénes TObject ersetzen

Beitrag von wp_xyz »

Wichtig auch, mit der Debug-IDE zu arbeiten, oder zumindest in den Projekt-Optionen unter "Hinzufügungen und Beeinflussungen" eine Option mit dem Wert "-gw2" oder "-gw3" einrichten, so dass alle benötigten Units mit Debug-Informationen übersetzt werden.

Antworten