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.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())
|
||||||
|
@@ -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);
|
||||||
|
Reference in New Issue
Block a user