aboutsummaryrefslogtreecommitdiffstats
path: root/share/qtcreator/debugger/gdbbridge.py
diff options
context:
space:
mode:
Diffstat (limited to 'share/qtcreator/debugger/gdbbridge.py')
-rw-r--r--share/qtcreator/debugger/gdbbridge.py46
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.