Hi Benoit,
I don’t want the agent to be concerned with presentation of data, choosing between decimal, hex and other formats, choosing an icon, choosing character attributes like font and color, implement
“pretty printing” and so on. I don’t believe it will necessarily improve performance: when symbol resolution is done locally by the symbols server and client uses caches and command coalescing, such service can actually degrade performance, epically since
local machine is usually much more powerful that the remove one. I don’t want Eclipse GUI to be changed to use a new service – at least for backward compatibility, if nothing else. I don’t want to provide maintenance and support for non-essential services
like that, e.g. develop and maintain addition regression tests automation for that.
However, I understand that such service might be appealing for someone looking to make it easier to implement a simple client. If we can call this service optional, create a separate source directory
for services like that, and don’t commit to support it, then I’m OK with it.
Regards,
Eugene
From: tcf-dev-bounces@xxxxxxxxxxx [mailto:tcf-dev-bounces@xxxxxxxxxxx]
On Behalf Of Benoit Perrin
Sent: Monday, August 22, 2016 3:48 AM
To: tcf-dev@xxxxxxxxxxx
Subject: [tcf-dev] Quick expressions support in TCF
Hello TCF dev,
I would like to contribute a new service to the TCF agent. This service can be used by client instead of the Expressions service to get basic information about expressions with few TCF requests. So, in the context of a connection with high network latencies,
a client can visualize expressions quicker.
The service returns less information than the Expressions service; instead, it returns high level data that a UI client can display directly without extra requests. For example, it returns the value of the _expression_ as a string and gives a quick access
to the children of the _expression_ (e.g. pointer, array, structure for C language).
For example, for a C structure like:
test.integer = 1234;
test.string = "A string";
test.floating = 3.14;
test.array[0] = 'A';
Evaluating the expressions with this service, it returns the info:
{"Error":null,"TypeName":"struct TEST","TypeKind":6,"Value":"0x00007FFF9CFB81A0","HasChildren":true,"ID":"WREXPR.10.FP0.P18456.18456.48.@M0.@S4%28.B708DE.57BACF34.1C.79*28.B708DE.57BACF34.1C.EA+2.0.0.0.P18456.1.7FFF9CFB81A0","Label":"test","Display":"test : 0x00007FFF9CFB81A0"}
The "Display" field is a proposition of a display of the _expression_ 'test' that the client can use directly.
Getting the children of the expressions, it returns a list of info:
[{"Error":null,"SymbolName":"integer","TypeName":"int","TypeKind":2,"Value":"1234","ID":"WREXPR.10.FP0.P18456.18456.48.@M0.@S4%28.B708DE.57BACF34.1C.57*28.B708DE.57BACF34.1C.EA+2.0.0.0.P18456.1.7FFF9CFB81A0","Label":"integer","Display":"integer : 1234"},
{"Error":null,"SymbolName":"string","TypeName":"char *","TypeKind":4,"Value":"0x0000000000400634","HasChildren":true,"ID":"WREXPR.10.FP0.P18456.18456.48.@M0.@S4%28.B708DE.57BACF34.1C.6C*28.B708DE.57BACF34.1C.EA+2.0.0.0.P18456.1.400634","Label":"string","Display":"string : 0x0000000000400634 \"A string\""},
{"Error":null,"SymbolName":"floating","TypeName":"double","TypeKind":3,"Value":"3.140000000000000","ID":"WREXPR.10.FP0.P18456.18456.48.@M0.@S4%28.B708DE.57BACF34.1C.B6*28.B708DE.57BACF34.1C.EA+2.0.0.0.P18456.1.7FFF9CFB81B0","Label":"floating","Display":"floating : 3.140000000000000"},
{"Error":null,"SymbolName":"array","TypeName":"char [10]","TypeKind":5,"Value":"0x00007FFF9CFB81B8","HasChildren":true,"ID":"WREXPR.10.FP0.P18456.18456.48.@M0.@S4%28.B708DE.57BACF34.1C.BD*28.B708DE.57BACF34.1C.EA+2.0.0.0.P18456.1.7FFF9CFB81B8","Label":"array","Display":"array : 0x00007FFF9CFB81B8 \"A\\u0004@\""}]
With only two requests to the agent, the client is able to display basic information about a frame variable.
Do you think there is an interest by this contribution to the core TCF?
Any comment/suggestion is welcome.
Benoit
--
Benoit Perrin, Senior Member of Technical Staff, Wind River