![]() |
Debug Visualizers für Interfaces?
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 |
AW: Debug Visualizers für Interfaces?
Deine Frage verstehe ich nicht ganz, aber bringt Dich das vielleicht weiter?
![]() EDIT: Habe den Thread nochmal überflogen. Du hast offenbar genau das gleiche Problem wie ich damals. Also sollte die Antwort passen. :-) |
AW: Debug Visualizers für Interfaces?
Zitat:
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... :stupid: (Abgesehen vom Maus-Over Display) Oder übersehe ich etwas? Ich hatte gehofft es gibt sowas wie:
Delphi-Quellcode:
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...)
Var
LocalInterface : IMyInterface; begin LocalInterface := CurThread.Evaluate(Expression+'.Instance'); Result := LocalInterface.Foo+' '+LocalInterface.Bar+' Cool : '+LocalInterface.Fancy; end; 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... :twisted: PPS.: Oh - man könnte natürlich auch eine .ToJSON verwenden um im Visualizer die Instance ab zu bilden... |
AW: Debug Visualizers für Interfaces?
OK ein Visualizer hat doch Vorteile - Vorausgesetzt das Interface hat eine AsString Methode...
Eine Variable
Delphi-Quellcode:
Wird dann auch richtig dargestellt...
var
Foo : TArray<IMyInterface> Oder auch ein anderes Interface
Delphi-Quellcode:
Wenn man dann ListFoo.Many(Foo) als Watch-Variable nimmt und Funktionsaufrufe erlaubt, Erhält man eine "richtige" Liste...
var
ListFoo : IMyListinterface; // Function Many(AFoo : IMyInterface) : TArray<IMyInterface>; Foo : IMyInterface; Nice... Mavarik |
AW: Debug Visualizers für Interfaces?
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
Delphi-Quellcode:
versuchst?
CurThread.Evaluate(Expression+' as TObject')
|
AW: Debug Visualizers für Interfaces?
Zitat:
hmm dann mit ResultAddr und casten? Ich dachte man kommt nicht an den Speicherbereich?
Delphi-Quellcode:
Sowas? Muss ich testen
var
Instance : TFoo absolute ResultAddr; |
AW: Debug Visualizers für Interfaces?
Zitat:
Delphi-Quellcode:
ist, welche in der konkreten Implementation des Interfaces dann
function GetObject: TObject
Delphi-Quellcode:
zurückgibt. Mal schauen, ob ich den Thread noch irgendwie finde; dort stand glaube ich auch beschrieben, was die Problematik bei normalen Casts war.
Self
Edit: ![]() 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
Delphi-Quellcode:
Operator verwenden (vermutlich aber weniger performant).
as
|
AW: Debug Visualizers für Interfaces?
Zitat:
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 |
AW: Debug Visualizers für Interfaces?
Zitat:
Delphi-Quellcode:
noch ein ganzer Rattenschwanz anhängt:
as
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 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