[fpc-pascal] fpDebug extension for Visual Studio Code
Joost van der Sluis
joost at cnoc.nl
Tue May 19 10:42:25 CEST 2020
On 5/19/20 12:22 AM, Martin Frb wrote:
> On 18/05/2020 23:43, Joost van der Sluis wrote:
>> All the basics should work, if someone could test it a bit that would
>> be nice.
>>
>> Threading-support is still very lacking, and how variables are
>> presented is not really nice. I'll be working on that.
>
> While this can be changed in PascalBuilder, there are some considerations.
>
> Some of those may want to become configurable. So not sure yet.
> More likely the formatting may want to depend an arguments passed to the
> functions.
> In the Lazarus IDE currently representation of the values is entirely to
> the backend. And that is plain wrong. The IDE will have to have some
> influence on that.
>
> I haven't yet given it much consideration. Just putting it out there for
> thought....
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.
Regards,
Joost.
More information about the fpc-pascal
mailing list