AW: Überschreiben von TThread.Terminate
Und wie geht das? Mit inherited?
|
AW: Überschreiben von TThread.Terminate
Zitat:
Was nicht einkompiliert ist (weil es z.B. nicht verwendet wird), das kann auch nicht im Debugger mit einem Haltepunkt versehn werden. Sind denn in dieser Procedur die kleinen blauen Pünktchen zu sehn? (oder überhaupt irgendwo in der ganzen Unit) |
AW: Überschreiben von TThread.Terminate
Zitat:
Delphi-Quellcode:
Es gibt da auch noch ein größeres Beispiel.
constructor TReadPipe.Create(Aread_stdout,Awrite_stdout:THandle);
begin inherited Create(false); FEvent:=TEvent.Create(nil,false,false,''); FSyncString:=TSyncString.Create; Fread_stdout:=Aread_stdout; Fwrite_stdout:=Awrite_stdout; freeonterminate:=true; end; destructor TReadPipe.Destroy; begin FEvent.Free; FSyncString.Free; inherited; end; procedure TReadPipe.Execute; var Buf:array[0..1023] of byte; bread:Cardinal; s:string; begin repeat ReadFile(Fread_stdout, Buf, length(buf), bread, nil); //wait for input if terminated then exit; setlength(s,bread); move(buf[0],s[1],bread); FSyncstring.Add(s); FEvent.SetEvent; until terminated; end; procedure TReadPipe.Terminate; const fin='fin'; var bwrite:Cardinal; begin inherited; WriteFile(Fwrite_stdout,fin,length(fin),bwrite,nil); end; |
AW: Überschreiben von TThread.Terminate
Zitat:
Und nein, in der ganzen Classes-Unit werden keine blauen Pünktchen angezeigt, auch wenn die Debug-DCUs aktiviert sind. Zitat:
|
AW: Überschreiben von TThread.Terminate
Du hast nicht zufällig "build with runtime packages" an, oder?
|
AW: Überschreiben von TThread.Terminate
Zitat:
Zitat:
|
AW: Überschreiben von TThread.Terminate
Ok, das ist nun ein Problem, was mit der Ursprungsfrage nix mehr zu tun hat.
Ich kann nur sagen: dass du nicht in die Classes.pas debuggen kannst, hat mit den Runtime Packages zu tun, die sind nämlich Release und keine Debug Builds. Es gibt wohl ne Möglichkeit, sich Debug Builds der Delphi eigenen Runtime Packages zu basteln, aber das ist recht kompliziert, wenn ich mich recht erinnere. Wenn du also dein Projekt ohne Packages kompilierst, und debug dcus anhakst, kannst du auch durch die ganzen rtl/vcl sourcen debuggen. Wenn du also auf eine Variable von TMeinThread Terminate aufrufst wird mit Sicherheit über inherited die verdeckte Terminate Methode von TThread aufgerufen. Du darfst nur keine Variable vom Typ TThread haben, dann würde nur die von dort aufgerufen. |
AW: Überschreiben von TThread.Terminate
Ja, das stimmt, das ist wieder ein anderes Problem und mein ursprüngliches wäre nun geklärt. Danke für die ausführliche Erklärung! Klar, wenn in den Runtime Packages keine Debug Symbole sind, und ich das Projekt aktuell OHNE Runtime Packages nicht compilieren kann, dann wird das schwierig mit dem Debuggen der Delphi-eigenen Klassen.
|
AW: Überschreiben von TThread.Terminate
@Stevie
debuggen in classes ... wenn Du classes.pas zu debuggen in Dein Projektverzeichnis kopierst. |
AW: Überschreiben von TThread.Terminate
Zitat:
Einmal das Selbsteingebundene/Kopierte und dann verwenden die restlichen Delphi/VCL-Units dennoch die originale Classes.pas. Heißt also, daß beim Debuggen in diesem Fall eher mit Problemem zu rechnen ist, da Einiges die Originale und Anderes die Kopie verwendet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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