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>
This commit is contained in:
hjk
2020-09-07 14:00:09 +02:00
parent bc4187727c
commit a50f1baf5d
2 changed files with 15 additions and 9 deletions

View File

@@ -121,6 +121,8 @@ class Dumper(DumperBase):
self.process = None self.process = None
self.target = None self.target = None
self.fakeAddress_ = None
self.fakeLAddress_ = None
self.eventState = lldb.eStateInvalid self.eventState = lldb.eStateInvalid
self.executable_ = None self.executable_ = None
@@ -258,10 +260,15 @@ class Dumper(DumperBase):
return align return align
def listMembers(self, value, nativeType): def listMembers(self, value, nativeType):
#DumperBase.warn("ADDR: 0x%x" % self.fakeAddress) #DumperBase.warn("ADDR: 0x%x" % self.fakeAddress_)
fakeAddress = self.fakeAddress if value.laddress is None else value.laddress if value.laddress:
sbaddr = lldb.SBAddress(fakeAddress, self.target) fakeAddress = lldb.SBAddress(value.laddress, self.target)
fakeValue = self.target.CreateValueFromAddress('x', sbaddr, nativeType) fakeLAddress = value.laddress
else:
fakeAddress = self.fakeAddress_
fakeLAddress = self.fakeLAddress_
fakeValue = self.target.CreateValueFromAddress('x', fakeAddress, nativeType)
fakeValue.SetPreferSyntheticValue(False) fakeValue.SetPreferSyntheticValue(False)
baseNames = {} baseNames = {}
@@ -304,7 +311,7 @@ class Dumper(DumperBase):
fieldName = '#%s' % anonNumber fieldName = '#%s' % anonNumber
fakeMember = fakeValue.GetChildAtIndex(i) fakeMember = fakeValue.GetChildAtIndex(i)
fakeMemberAddress = fakeMember.GetLoadAddress() fakeMemberAddress = fakeMember.GetLoadAddress()
offset = fakeMemberAddress - fakeAddress offset = fakeMemberAddress - fakeLAddress
yield self.Field(self, name=fieldName, type=self.fromNativeType(nativeFieldType), yield self.Field(self, name=fieldName, type=self.fromNativeType(nativeFieldType),
bitsize=fieldBitsize, bitpos=8 * offset) bitsize=fieldBitsize, bitpos=8 * offset)
@@ -1228,10 +1235,6 @@ class Dumper(DumperBase):
if not self.partialVariable: if not self.partialVariable:
self.resetPerStepCaches() self.resetPerStepCaches()
anyModule = self.target.GetModuleAtIndex(0)
anySymbol = anyModule.GetSymbolAtIndex(0)
self.fakeAddress = int(anySymbol.GetStartAddress())
frame = self.currentFrame() frame = self.currentFrame()
if frame is None: if frame is None:
self.reportResult('error="No frame"', args) self.reportResult('error="No frame"', args)
@@ -1968,6 +1971,8 @@ class Tester(Dumper):
if line != 0: if line != 0:
self.report = savedReport self.report = savedReport
self.process.SetSelectedThread(stoppedThread) self.process.SetSelectedThread(stoppedThread)
self.fakeAddress_ = frame.GetPC()
self.fakeLAddress_ = frame.GetPCAddress()
self.fetchVariables(args) self.fetchVariables(args)
#self.describeLocation(frame) #self.describeLocation(frame)
self.report('@NS@%s@' % self.qtNamespace()) self.report('@NS@%s@' % self.qtNamespace())

View File

@@ -1215,6 +1215,7 @@ void tst_Dumpers::initTestCase()
m_debuggerVersion = ba.toInt(); m_debuggerVersion = ba.toInt();
if (!m_debuggerVersion) { if (!m_debuggerVersion) {
if (output.startsWith("lldb version")) { if (output.startsWith("lldb version")) {
output = output.split('\n')[0]; // drop clang/llvm version
int pos1 = output.indexOf('.', 13); int pos1 = output.indexOf('.', 13);
int major = output.mid(13, pos1++ - 13).toInt(); int major = output.mid(13, pos1++ - 13).toInt();
int pos2 = output.indexOf(' ', pos1); int pos2 = output.indexOf(' ', pos1);