aboutsummaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorhjk <hjk121@nokiamail.com>2014-04-11 13:20:59 +0200
committerhjk <hjk121@nokiamail.com>2014-04-11 14:24:35 +0200
commit03c6df1fabe796fc71ad32251ff89093cca129f1 (patch)
treecc3771dccb178a0662f9965635de1a37458396ec /share
parent7d6c823b86692fec33e5cdd6f025fa0f450a7d25 (diff)
Debugger: Fix staticMetaObject extraction with LLDB
When asked for Foo::staticMetaObject, it will find any *::staticMetaObject. Looking for the mangled name finds the one we need. Change-Id: I4508a3c282bc8a46efa011efb73f32cdbf46398c Reviewed-by: Eike Ziller <eike.ziller@digia.com>
Diffstat (limited to 'share')
-rw-r--r--share/qtcreator/debugger/dumper.py3
-rw-r--r--share/qtcreator/debugger/gdbbridge.py3
-rw-r--r--share/qtcreator/debugger/lldbbridge.py7
3 files changed, 11 insertions, 2 deletions
diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py
index e55f55b882..bd5e3c27f8 100644
--- a/share/qtcreator/debugger/dumper.py
+++ b/share/qtcreator/debugger/dumper.py
@@ -969,8 +969,7 @@ class DumperBase:
if typeName.find('<') >= 0:
return 0
- staticMetaObjectName = typeName + "::staticMetaObject"
- result = self.findSymbol(staticMetaObjectName)
+ result = self.findStaticMetaObject(typeName)
# We need to distinguish Q_OBJECT from Q_GADGET:
# a Q_OBJECT SMO has a non-null superdata (unless it's QObject itself),
diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py
index 5ff97fdbf6..4b2b9391eb 100644
--- a/share/qtcreator/debugger/gdbbridge.py
+++ b/share/qtcreator/debugger/gdbbridge.py
@@ -861,6 +861,9 @@ class Dumper(DumperBase):
def extractByte(self, addr):
return struct.unpack("b", self.readRawMemory(addr, 1))[0]
+ def findStaticMetaObject(self, typeName):
+ return self.findSymbol(typeName + "::staticMetaObject")
+
def findSymbol(self, symbolName):
try:
result = gdb.lookup_global_symbol(symbolName)
diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index 421261408f..b5c737dda7 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -883,6 +883,13 @@ class Dumper(DumperBase):
buf[i] = data.GetUnsignedInt8(error, i)
return Blob(bytes(buf))
+ def mangleName(self, typeName):
+ return '_ZN%sE' % ''.join(map(lambda x: "%d%s" % (len(x), x), typeName.split('::')))
+
+ def findStaticMetaObject(self, typeName):
+ symbolName = self.mangleName(typeName + '::staticMetaObject')
+ return self.target.FindFirstGlobalVariable(symbolName)
+
def findSymbol(self, symbolName):
return self.target.FindFirstGlobalVariable(symbolName)