AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Überwachte Ausdrücke optimieren?

Ein Thema von stahli · begonnen am 30. Jul 2016 · letzter Beitrag vom 26. Feb 2021
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Überwachte Ausdrücke optimieren?

  Alt 3. Aug 2016, 23:42
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:
Guid - IsoGuid - TsoGuid($2FB1204) as IsoGuid
-1
-2
-3
-4a "TsoGuid($2FB1204) as IsoGuid"
-5
--
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.007 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#12

AW: Überwachte Ausdrücke optimieren?

  Alt 4. Aug 2016, 10:35
CurThread.Evaluate(Expression+'.AsString', ...
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Überwachte Ausdrücke optimieren?

  Alt 4. Aug 2016, 12:15
Oha, so einfach. 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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli ( 4. Aug 2016 um 12:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.007 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#14

AW: Überwachte Ausdrücke optimieren?

  Alt 4. Aug 2016, 13:01
Oha, so einfach. Also funktioniert das über die RTTI.
Nein, über den Debugger

IOTAThread.Evaluate macht das, was du auch während des Debuggens über Strg+F7 machen kannst.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 4. Aug 2016 um 13:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Überwachte Ausdrücke optimieren?

  Alt 4. Aug 2016, 22:32
Stevie, Du hast einen Kaffee oder Milch bei mir gut!

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.
http://docwiki.embarcadero.com/RADSt...sualisierungen

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.
Miniaturansicht angehängter Grafiken
vis1.jpg   vis2.jpg   vis3.jpg   vis4.jpg  
Angehängte Dateien
Dateityp: pas usoGuidVisualizer.pas (7,6 KB, 30x aufgerufen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.288 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Überwachte Ausdrücke optimieren?

  Alt 5. Aug 2016, 06:15
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.882 Beiträge
 
Delphi 12 Athens
 
#17

AW: Überwachte Ausdrücke optimieren?

  Alt 5. Aug 2016, 20:06
Dito.

Jetzt hast du bei mir einen Kaffee MIT Milch gut

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Überwachte Ausdrücke optimieren?

  Alt 26. Feb 2021, 00:52
Hier ein Beispiel für Überwachungsformulare: https://www.delphipraxis.net/206854-...n-threads.html
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:26 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