![]() |
AW: Überwachte Ausdrücke optimieren?
Ich komme so leider auch nicht weiter.
Den Formularvisualizer möchte ich nicht nutzen. Nur den StringReplacer. Über OTA ermittle ich den aktuellen Thread. Über CurThread.Evaluate(Expression...) wird der Ausgabetext ermittelt. Das ergibt aber den ungewollten "TsoGuid($2FB1204) as IsoGuid". Im folgenden Code wird der Text erfolgreich abgerufen, nur, dass ich den eben nicht ändern kann: Gewünscht wäre: IsoGuid.AsString Zitat:
Delphi-Quellcode:
CodeSite.Send(Expression + ' - ' + TypeName + ' - ' + EvalResult);
// Guid - IsoGuid - TsoGuid($2F21204) as IsoGuid if (TypeName = 'IsoGuid') then begin Result := 'IsoGuid! => ' + EvalResult; CodeSite.Send('-1'); if Supports(BorlandIDEServices, IOTADebuggerServices, DebugSvcs) then CurProcess := DebugSvcs.CurrentProcess; if CurProcess <> nil then begin CodeSite.Send('-2'); CurThread := CurProcess.CurrentThread; if CurThread <> nil then begin CodeSite.Send('-3'); repeat begin Done := True; EvalRes := CurThread.Evaluate(Expression, @ResultStr, Length(ResultStr), CanModify, eseAll, '', ResultAddr, ResultSize, ResultVal, '', 0); case EvalRes of erOK: begin Result := ResultStr; CodeSite.Send('-4a "' + Result + '"'); end; erDeferred: begin CodeSite.Send('-4b'); FCompleted := False; FDeferredResult := ''; FDeferredError := False; FNotifierIndex := CurThread.AddNotifier(Self); while not FCompleted do DebugSvcs.ProcessDebugEvents; CurThread.RemoveNotifier(FNotifierIndex); FNotifierIndex := -1; if not FDeferredError then begin if FDeferredResult <> '' then Result := FDeferredResult else Result := ResultStr; end; end; erBusy: begin CodeSite.Send('-4c'); DebugSvcs.ProcessDebugEvents; Done := False; end; end; CodeSite.Send('-5'); end until Done = True; end; end; CodeSite.Send('--'); Also müsste CurThread.Evaluate irgendwie überschrieben werden. Aber dann müsste die als einziges bekannte Adresse ja auch in das Interface-Object gecastet werden. Dann könnte ich das aber doch auch gleich (wie im vorigen Beitrag) in Visualizer direkt tun - nur dass das dort (noch) nicht funktionierte. Sorry, ist etwas schwierig für mich. :-( |
AW: Überwachte Ausdrücke optimieren?
Delphi-Quellcode:
CurThread.Evaluate(Expression+'.AsString', ...
|
AW: Überwachte Ausdrücke optimieren?
Oha, so einfach. :shock: Also funktioniert das über die RTTI.
Jetzt erschließt sich mir auch, was ich gestern an eigenartigen Beispielen gefunden hatte. ;-) Muss dann heute Abend nur noch funktionieren. |
AW: Überwachte Ausdrücke optimieren?
Zitat:
IOTAThread.Evaluate macht das, was du auch während des Debuggens über Strg+F7 machen kannst. |
AW: Überwachte Ausdrücke optimieren?
Liste der Anhänge anzeigen (Anzahl: 5)
Stevie, Du hast einen Kaffee oder Milch bei mir gut! :stupid:
Also falls es mal jemand braucht: Normalerweise sieht man beim Debuggen nur den Typ und die Speicheradresse von Objekten und Interfaces. Man kann sich natürlich auch deren Eigenschaften anzeigen lassen, muss das aber jedes mal explizit angeben. Durch Einrichtung eines DebugVisualizers kann man die Standardausgabe ändern. So lasse ich jetzt automatisch eine Guid der Interfaces anzeigen, wenn ich diese in den überwachten Ausdrücken aufnehme oder mit der Maus darüber gehe. Neben den einfachen "Wertersetzern" kann man auch "externe Viewer" einrichten, durch die man komplexere Formulare einbinden kann wie bei den TStringList. ![]() Mir reicht jedoch die Wertersetzung. Die pas liegt hier bei. "soGuid" müsstet Ihr lediglich durch Eure Klassennamen ersetzen sowie ggf. "AsString" wenn Ihr etwas anderes anzeigen wollt. Eurer Projektgruppe müsst Ihr lediglich ein Package hinzufügen. Im Package unter "Erfordert" von Hand "designide" hinzufügen und das Package installieren. Unter Optionen/Debugger-Optionen/Visualisierungen muss das Package aktiviert sein. Also insgesamt kein großer Aufwand mit einem ggf. recht hohen Nutzen. |
AW: Überwachte Ausdrücke optimieren?
Vielen Dank! Mit dem Thema wollte ich mich schon länger einmal beschäftigen, habe es aber zeitlich nie geschafft...
Mit dem Beispiel werde ich das nun doch einmal ändern. :thumb: |
AW: Überwachte Ausdrücke optimieren?
Dito.
Jetzt hast du bei mir einen Kaffee MIT Milch gut :thumb: Rollo |
AW: Überwachte Ausdrücke optimieren?
Hier ein Beispiel für Überwachungsformulare:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:05 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