diff options
Diffstat (limited to 'share/qtcreator/debugger/gdbbridge.py')
-rw-r--r-- | share/qtcreator/debugger/gdbbridge.py | 46 |
1 files changed, 38 insertions, 8 deletions
diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index ecc53a8f32..c81bca1dd5 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -229,10 +229,11 @@ class Dumper(DumperBase): def fromFrameValue(self, nativeValue): #DumperBase.warn('FROM FRAME VALUE: %s' % nativeValue.address) val = nativeValue - try: - val = nativeValue.cast(nativeValue.dynamic_type) - except: - pass + if self.useDynamicType: + try: + val = nativeValue.cast(nativeValue.dynamic_type) + except: + pass return self.fromNativeValue(val) def fromNativeValue(self, nativeValue): @@ -1151,7 +1152,9 @@ class Dumper(DumperBase): def nativeValueDereferencePointer(self, value): # This is actually pretty expensive, up to 100ms. deref = value.nativeValue.dereference() - return self.fromNativeValue(deref.cast(deref.dynamic_type)) + if self.useDynamicType: + deref = deref.cast(deref.dynamic_type) + return self.fromNativeValue(deref) def nativeValueDereferenceReference(self, value): nativeValue = value.nativeValue @@ -1457,19 +1460,46 @@ class CliDumper(Dumper): def putOriginalAddress(self, address): pass - def fetchVariable(self, name): + def fetchVariable(self, line): + # HACK: Currently, the response to the QtCore loading is completely + # eaten by theDumper, so copy the results here. Better would be + # some shared component. + self.qtCustomEventFunc = theDumper.qtCustomEventFunc + self.qtCustomEventPltFunc = theDumper.qtCustomEventPltFunc + self.qtPropertyFunc = theDumper.qtPropertyFunc + + names = line.split(' ') + name = names[0] + + toExpand = set() + for n in names: + while n: + toExpand.add(n) + n = n[0:n.rfind('.')] + args = {} args['fancy'] = 1 - args['passexception'] = 1 + args['passexceptions'] = 1 args['autoderef'] = 1 args['qobjectnames'] = 1 args['varlist'] = name + args['expanded'] = toExpand + self.expandableINames = set() self.prepare(args) + self.output = name + ' = ' value = self.parseAndEvaluate(name) with TopLevelItem(self, name): self.putItem(value) - return self.output + + if not self.expandableINames: + return self.output + '\n\nNo drill down available.\n' + + pattern = ' pp ' + name + ' ' + '%s' + return (self.output + + '\n\nDrill down:\n ' + + '\n '.join(pattern % x for x in self.expandableINames) + + '\n') # Global instances. |