[fpc-pascal] fpDebug extension for Visual Studio Code
Martin Frb
lazarus at mfriebe.de
Tue May 19 12:59:18 CEST 2020
On 19/05/2020 10:42, Joost van der Sluis wrote:
>
> Yes, you write about it earlier. Now it's time to discuss things.
>
> Looking at the DAB-protocol I came to some new insights. Microsoft
> managed to create a simple interface which makes it possible for all
> kinds of debuggers to work with the same GUI. Just by adding an
> abstraction layer.
>
> Only thing is that I missed a few functions and do not need others.
>
> So I've added my own abstraction layer. Now it is in the FPDServer
> project, but I think it should be made part of fpDebug itself.
>
> It is basically this class: (see
> https://gitlab.freepascal.org/Joost/fpdserver/blob/master/fpdbgvariables.pas)
>
> TDbgVariable = class
> private
> FName: string;
> FValue: string;
> FType: string;
> FVisibleInScope: Boolean;
> FFlags: TStringArray;
> FAdditionalInfo: TDbgVariableList;
> FInheritedChildren: TDbgVariableList;
> FChildren: TDbgVariableList;
> published
> property Name: string read FName write FName;
> property Value: string read FValue write FValue;
> property &Type: string read FType write FType;
> property VisibleInScope: Boolean read FVisibleInScope write
> FVisibleInScope;
> property Flags: TStringArray read FFlags write FFlags;
> property AdditionalInfo: TDbgVariableList read FAdditionalInfo;
> property InheritedChildren: TDbgVariableList read FInheritedChildren;
> property Children: TDbgVariableList read FChildren;
> end;
>
> I think that we can give a frontend (Lazarus, Console, DAB) all the
> information it needs with this structure.
>
> The advantage is that it is layered, so a GUI can collapse
> information. We could expand the TDbgVariableBuilder to create these
> structures.
>
> For strings for example, we could add the length, string-type,
> binary-representation and character-set of the string in
> AdditionalInfo. In VS Code this info will end-up as a child of the
> variable, which a user could expand if needed.
>
> A lot of the existing functionality can be used.
Where is that documented? Assuming this is part of the API?
E.g. what goes into Flags/AdditionalInfo?
Btw, for Children (I guess Fields of a struct?) we have TDbgFields. So
maybe that can be replaced? But it affects all debuggers....
Things like Children should have a Getter, so they can be produced on
demand.
Though that creates issues:
- Calling in correct thread
- any data retrieval from the debugger needs to be async. I.e. on
callback. The IDE demands the data, and it will be available in/after a
callback.
However, maybe that can be done in a subclass/wrapper in the
TFpDebugDebugger class. That is were the async is currently handled.
More information about the fpc-pascal
mailing list