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.
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal