forked from qt-creator/qt-creator
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:
@@ -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())
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user