AGB  ·  Datenschutz  ·  Impressum  







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

Debug Visualizers für Interfaces?

Ein Thema von Mavarik · begonnen am 20. Mai 2017 · letzter Beitrag vom 21. Mai 2017
Antwort Antwort
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#1

Debug Visualizers für Interfaces?

  Alt 20. Mai 2017, 11:43
Hallo Zusammen!

Ich würde gerne einen Debugger Visualizers für ein Interface Programmieren.

Jetzt habe ich gelesen, dass man nicht an die Instance bzw. den Adress-Raum ran kommt...

Ist das immer noch so?

Oder kann ich per Evaluate mir die Instance des Interfaces holen?

Grüsse Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

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

AW: Debug Visualizers für Interfaces?

  Alt 20. Mai 2017, 12:45
Deine Frage verstehe ich nicht ganz, aber bringt Dich das vielleicht weiter?
http://www.delphipraxis.net/189852-u...ptimieren.html

EDIT: Habe den Thread nochmal überflogen. Du hast offenbar genau das gleiche Problem wie ich damals. Also sollte die Antwort passen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (20. Mai 2017 um 12:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Debug Visualizers für Interfaces?

  Alt 21. Mai 2017, 14:35
Deine Frage verstehe ich nicht ganz, aber bringt Dich das vielleicht weiter?
http://www.delphipraxis.net/189852-u...ptimieren.html

EDIT: Habe den Thread nochmal überflogen. Du hast offenbar genau das gleiche Problem wie ich damals. Also sollte die Antwort passen.
Nein... Ich habe mir natürlich den Thread schon angesehen, bevor ich hier die Frage gepostet habe.

Das Funktioniert natürlich nur, wenn das Interface auch eine Methode .AsString hat... Jetzt kann man natürlich sagen, dann verpasse ich meinem Interface halt so eine Methode.

Wäre sicherlich auch die bessere Stelle als im Visualizer... Aber dann kann ich auch im "Fenster der Überwachten Ausdrücke" MyInterface.AsString schreiben und brauche keine Visualizer mehr...
(Abgesehen vom Maus-Over Display)

Oder übersehe ich etwas?

Ich hatte gehofft es gibt sowas wie:

Delphi-Quellcode:
Var
  LocalInterface : IMyInterface;
begin
  LocalInterface := CurThread.Evaluate(Expression+'.Instance');
  Result := LocalInterface.Foo+' '+LocalInterface.Bar+' Cool : '+LocalInterface.Fancy;
end;
Ich habe in meinem FDK viele Interfaces und möchte diese "korrekt" im Fenster der Überwachten Ausdrücke darstellen - und das auch ohne, dass der User eine .AsString implementieren muss. (Jetzt könnte man natürlich sagen... So kann der User sich das besser anpassen... Tja, es gibt immer zwei Seiten...)

Mavarik

PS. In der "case EvalRes of" fehlter das erError, daher hatte ich auch nie ein Ergebnis.
bzw. Lustig das alle das begin end innerhalb des Repeats aus dem Beispiel mit kopieren...

PPS.: Oh - man könnte natürlich auch eine .ToJSON verwenden um im Visualizer die Instance ab zu bilden...

Geändert von Mavarik (21. Mai 2017 um 14:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Debug Visualizers für Interfaces?

  Alt 21. Mai 2017, 14:54
OK ein Visualizer hat doch Vorteile - Vorausgesetzt das Interface hat eine AsString Methode...

Eine Variable

Delphi-Quellcode:
var
  Foo : TArray<IMyInterface>
Wird dann auch richtig dargestellt...

Oder auch ein anderes Interface

Delphi-Quellcode:
var
  ListFoo : IMyListinterface; // Function Many(AFoo : IMyInterface) : TArray<IMyInterface>;
  Foo : IMyInterface;
Wenn man dann ListFoo.Many(Foo) als Watch-Variable nimmt und Funktionsaufrufe erlaubt, Erhält man eine "richtige" Liste...

Nice...

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Debug Visualizers für Interfaces?

  Alt 21. Mai 2017, 14:56
Das sind doch Delphi-Interfaces?

Nja, der Visualizer für Öbjekte ist zwar auch nicht immer so optimal,
aber was pasiert, wenn du sowa wie CurThread.Evaluate(Expression+' as TObject') versuchst?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Debug Visualizers für Interfaces?

  Alt 21. Mai 2017, 15:18
Das sind doch Delphi-Interfaces?

Nja, der Visualizer für Öbjekte ist zwar auch nicht immer so optimal,
aber was pasiert, wenn du sowa wie CurThread.Evaluate(Expression+' as TObject') versuchst?
ok... Das Ergebnis wäre jedenfalls kein String...

hmm dann mit ResultAddr und casten? Ich dachte man kommt nicht an den Speicherbereich?

Delphi-Quellcode:
var
  Instance : TFoo absolute ResultAddr;
Sowas? Muss ich testen
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

AW: Debug Visualizers für Interfaces?

  Alt 21. Mai 2017, 15:44
Ich dachte man kommt nicht an den Speicherbereich?
An den Speicherbereich zum Objekt, das vom Interface gekapselt wird? Hatte irgendwo in einem Thread auf Stackoverflow mal gelesen, dass die einzig saubere Methode wohl das Implementieren einer Methode/Property function GetObject: TObject ist, welche in der konkreten Implementation des Interfaces dann Self zurückgibt. Mal schauen, ob ich den Thread noch irgendwie finde; dort stand glaube ich auch beschrieben, was die Problematik bei normalen Casts war.

Edit:
http://stackoverflow.com/questions/4...ject-in-delphi

Ist allerdings auch schon ein älterer Thread, kann sein, dass sich da mitlerweile was geändert hat.

Edit 2:
Ab D2010 kannst du scheinbar auch den as Operator verwenden (vermutlich aber weniger performant).
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (21. Mai 2017 um 15:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Debug Visualizers für Interfaces?

  Alt 21. Mai 2017, 15:57
An den Speicherbereich zum Objekt, das vom Interface gekapselt wird? Hatte irgendwo in einem Thread auf Stackoverflow mal gelesen, dass die einzig saubere Methode wohl das Implementieren einer Methode/Property function GetObject: TObject ist, welche in der konkreten Implementation des Interfaces dann Self zurückgibt. Mal schauen, ob ich den Thread noch irgendwie finde; dort stand glaube ich auch beschrieben, was die Problematik bei normalen Casts war.

Edit 2:
Ab D2010 kannst du scheinbar auch den as Operator verwenden (vermutlich aber weniger performant).
(Edit2) as soll weniger performant sein? OK...

Ich erkenne gerade den Nachteil meiner Idee... Falls das funktioniert. Ich muss dann ja wenigstens eine Implementation des Interfaces mit kompilieren.
ggf. hat das ungewollte Effekte... Abgesehen vom "Rattenschwanz" was noch automatisch mit kommen würde. e.g.

- Logging
- Multilinguale Exceptions
- Factory's
- uvm...

Generische Interfaces würden sowieso dann rausfallen...

Ich muss das erstmal alles gegeneinander abwägen. (Und testen)


Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: Debug Visualizers für Interfaces?

  Alt 21. Mai 2017, 16:18
(Edit2) as soll weniger performant sein? OK...
Jaa, die erste Variante ist ein einfacher Methodenaufruf, während an as noch ein ganzer Rattenschwanz anhängt:
Zitat:
This as operator use a special hidden interface GUID (ObjCastGUID ) to retrieve the object instance, calling an enhanced version of TObject.GetInterface
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:17 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