Debugger Visualizer

Debugger Visualizers kun je gebruiken sinds Delphi 2010. Met debug visualizers is het mogelijk om alle mogelijke soorten data tijdens debugging leesbaar te tonen. Standaard worden er al enkele visualizers mee geleverd, in Delphi 2010 b.v. een voor de datumtijd en een voor een stringlist.

Wat doen deze meegeleverde visualizers? In het geval van de datumtijd visualizer wordt in het watch scherm van de debug de datumtijd niet meer als een getal getoond maar als een string alsof de debugger een DateTimeToStr voor je uitvoert. Je vermoedt nu al vast dat dat dan ook het enige is wat er gebeurt, en je hebt geen ongelijk. Onder water wordt er namelijk niets anders gedaan dan de waarde van een datetime variable te converteren met behulp van de function DateTimeToStr.

De tweede standaard visualizer toont de inhoud van TStrings. In de watch of local variable list staat voor een variabele van het type TStrings ( of afgeleiden hiervan) een icoontje met een vergrootglas. Wanneer hier op geklikt wordt, verschijnt er een popup scherm met de waarden van de list inclusief de index.

Debugger Visualizers StringList

Een visualizer zit in een desingtime package en maakt gebruik van designide.dcp. Om te zien welke visualizers er zijn geinstalleerd en om visualizers te deinstalleren is er een nieuwe pagina genaamd visualizers toegevoegd aan de Tools | Options dialog. Onder “Debugger Options” node, bevindt zich een pagina “Visualizers”.

De standaard visualizers zijn terug te vinden in de Delphi source code onder ..\Embarcadero\RAD Studio\x.x\source\Win32\Visualizers

Als je een eigen visualizer wil schrijven moet deze erven van TInterfacedObject, IOTADebuggerVisualizer en IOTADebuggerVisualizerValueReplacer

De belangrijkste method (overerfd van IOTADebuggerVisualizerValueReplacer ) is GetReplacementValue. Hier vindt de werkelijke vertaling plaats.

De visualizer moet ook geregistreerd worden met behulp van IOTADebuggerServices en de method RegisterDebugVisualizer. De registratie moet bij uit het geheugen halen van de unit ook verwijderd worden en daarvoor wordt de method UnregisterDebugVisualizer gebruikt.