forked from qt-creator/qt-creator
Debugger: Pass request to sort struct members to {gdb,lldb}bridge.py
The request will be honored when creating the values instead of re-sorting in the frontend. Change-Id: I0ea13bd9b0700a4d2ae4f0b355c56ddd37557398 Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com>
This commit is contained in:
@@ -262,6 +262,8 @@ class Dumper(DumperBase):
|
||||
self.autoDerefPointers = int(args.get("autoderef", "0"))
|
||||
self.partialUpdate = int(args.get("partial", "0"))
|
||||
self.fallbackQtVersion = 0x50200
|
||||
self.sortStructMembers = bool(args.get("sortStructMembers", True))
|
||||
|
||||
#warn("NAMESPACE: '%s'" % self.qtNamespace())
|
||||
#warn("EXPANDED INAMES: %s" % self.expandedINames)
|
||||
#warn("WATCHERS: %s" % self.watchers)
|
||||
@@ -399,6 +401,7 @@ class Dumper(DumperBase):
|
||||
# Don't bother. It's only supplementary information anyway.
|
||||
pass
|
||||
|
||||
locals.sort(key = lambda item: item.name)
|
||||
for item in locals:
|
||||
value = self.downcast(item.value) if self.useDynamicType else item.value
|
||||
with OutputSafer(self):
|
||||
@@ -1143,6 +1146,9 @@ class Dumper(DumperBase):
|
||||
|
||||
def putFields(self, value, dumpBase = True):
|
||||
fields = value.type.fields()
|
||||
if self.sortStructMembers:
|
||||
fields.sort(key = lambda field:
|
||||
'[' + field.name if field.is_base_class else field.name)
|
||||
|
||||
#warn("TYPE: %s" % value.type)
|
||||
#warn("FIELDS: %s" % fields)
|
||||
|
||||
@@ -1145,9 +1145,11 @@ class Dumper(DumperBase):
|
||||
self.put('iname="%s",' % self.currentIName)
|
||||
self.put('name="[%s]",' % child.name)
|
||||
self.putItem(child)
|
||||
for i in xrange(m, n):
|
||||
#for i in range(n):
|
||||
child = value.GetChildAtIndex(i)
|
||||
|
||||
children = [value.GetChildAtIndex(i) for i in xrange(m, n)]
|
||||
if self.sortStructMembers:
|
||||
children.sort(key = lambda child: str(child.GetName()))
|
||||
for child in children:
|
||||
# Only needed in the QVariant4 test.
|
||||
if int(child.GetLoadAddress()) == 0xffffffffffffffff:
|
||||
typeClass = child.GetType().GetTypeClass()
|
||||
@@ -1655,6 +1657,7 @@ class Dumper(DumperBase):
|
||||
self.reportToken(args)
|
||||
self.expandedINames = set(args.get('expanded', []))
|
||||
self.autoDerefPointers = int(args.get('autoderef', '0'))
|
||||
self.sortStructMembers = bool(args.get("sortStructMembers", True));
|
||||
self.useDynamicType = int(args.get('dyntype', '0'))
|
||||
self.useFancy = int(args.get('fancy', '0'))
|
||||
self.passExceptions = int(args.get('passexceptions', '0'))
|
||||
|
||||
@@ -4711,6 +4711,7 @@ void GdbEngine::doUpdateLocals(const UpdateParameters ¶ms)
|
||||
|
||||
cmd.arg("resultvarname", m_resultVarName);
|
||||
cmd.arg("partialVariable", params.partialVariable);
|
||||
cmd.arg("sortStructMembers", boolSetting(SortStructMembers));
|
||||
cmd.flags = Discardable;
|
||||
cmd.callback = [this, params](const DebuggerResponse &r) { handleStackFrame(r); };
|
||||
runCommand(cmd);
|
||||
|
||||
@@ -874,6 +874,7 @@ void LldbEngine::doUpdateLocals(const UpdateParameters ¶ms)
|
||||
cmd.arg("autoderef", boolSetting(AutoDerefPointers));
|
||||
cmd.arg("dyntype", boolSetting(UseDynamicType));
|
||||
cmd.arg("partialVariable", params.partialVariable);
|
||||
cmd.arg("sortStructMembers", boolSetting(SortStructMembers));
|
||||
|
||||
cmd.beginList("watchers");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user