diff options
author | hjk <hjk@qt.io> | 2020-09-07 14:00:09 +0200 |
---|---|---|
committer | hjk <hjk@qt.io> | 2020-09-15 08:45:32 +0000 |
commit | a50f1baf5dee2c42f9e44d3c42acd834e4f0d81e (patch) | |
tree | 112cf6dba259aeee6ceab70f40f3e9b74c30e592 | |
parent | bc4187727cf65e25d839bd833ed320cfbe0ced62 (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.py | 23 | ||||
-rw-r--r-- | tests/auto/debugger/tst_dumpers.cpp | 1 |
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); |