aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2020-09-07 14:00:09 +0200
committerhjk <hjk@qt.io>2020-09-15 08:45:32 +0000
commita50f1baf5dee2c42f9e44d3c42acd834e4f0d81e (patch)
tree112cf6dba259aeee6ceab70f40f3e9b74c30e592
parentbc4187727cf65e25d839bd833ed320cfbe0ced62 (diff)
Debugger: Change LLDB value creation hack
... to something that works with LLDB 12. Task-number: QTCREATORBUG-24596 Change-Id: Ib2f8255d45a02fa3d2c737864994397f587e9b15 Reviewed-by: Christian Stenger <christian.stenger@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r--share/qtcreator/debugger/lldbbridge.py23
-rw-r--r--tests/auto/debugger/tst_dumpers.cpp1
2 files changed, 15 insertions, 9 deletions
diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index 31d180898a..13ad3d3e9e 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -121,6 +121,8 @@ class Dumper(DumperBase):
self.process = None
self.target = None
+ self.fakeAddress_ = None
+ self.fakeLAddress_ = None
self.eventState = lldb.eStateInvalid
self.executable_ = None
@@ -258,10 +260,15 @@ class Dumper(DumperBase):
return align
def listMembers(self, value, nativeType):
- #DumperBase.warn("ADDR: 0x%x" % self.fakeAddress)
- fakeAddress = self.fakeAddress if value.laddress is None else value.laddress
- sbaddr = lldb.SBAddress(fakeAddress, self.target)
- fakeValue = self.target.CreateValueFromAddress('x', sbaddr, nativeType)
+ #DumperBase.warn("ADDR: 0x%x" % self.fakeAddress_)
+ if value.laddress:
+ fakeAddress = lldb.SBAddress(value.laddress, self.target)
+ fakeLAddress = value.laddress
+ else:
+ fakeAddress = self.fakeAddress_
+ fakeLAddress = self.fakeLAddress_
+
+ fakeValue = self.target.CreateValueFromAddress('x', fakeAddress, nativeType)
fakeValue.SetPreferSyntheticValue(False)
baseNames = {}
@@ -304,7 +311,7 @@ class Dumper(DumperBase):
fieldName = '#%s' % anonNumber
fakeMember = fakeValue.GetChildAtIndex(i)
fakeMemberAddress = fakeMember.GetLoadAddress()
- offset = fakeMemberAddress - fakeAddress
+ offset = fakeMemberAddress - fakeLAddress
yield self.Field(self, name=fieldName, type=self.fromNativeType(nativeFieldType),
bitsize=fieldBitsize, bitpos=8 * offset)
@@ -1228,10 +1235,6 @@ class Dumper(DumperBase):
if not self.partialVariable:
self.resetPerStepCaches()
- anyModule = self.target.GetModuleAtIndex(0)
- anySymbol = anyModule.GetSymbolAtIndex(0)
- self.fakeAddress = int(anySymbol.GetStartAddress())
-
frame = self.currentFrame()
if frame is None:
self.reportResult('error="No frame"', args)
@@ -1968,6 +1971,8 @@ class Tester(Dumper):
if line != 0:
self.report = savedReport
self.process.SetSelectedThread(stoppedThread)
+ self.fakeAddress_ = frame.GetPC()
+ self.fakeLAddress_ = frame.GetPCAddress()
self.fetchVariables(args)
#self.describeLocation(frame)
self.report('@NS@%s@' % self.qtNamespace())
diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp
index 3646f9eaac..86b08d7f26 100644
--- a/tests/auto/debugger/tst_dumpers.cpp
+++ b/tests/auto/debugger/tst_dumpers.cpp
@@ -1215,6 +1215,7 @@ void tst_Dumpers::initTestCase()
m_debuggerVersion = ba.toInt();
if (!m_debuggerVersion) {
if (output.startsWith("lldb version")) {
+ output = output.split('\n')[0]; // drop clang/llvm version
int pos1 = output.indexOf('.', 13);
int major = output.mid(13, pos1++ - 13).toInt();
int pos2 = output.indexOf(' ', pos1);