forked from qt-creator/qt-creator
Debugger: Adapt QObject name dumper to Qt 6
Task-number: QTCREATORBUG-24098 Change-Id: Iee8a71eda4c15b3cd36e569805fef769f6eb090f Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -572,6 +572,13 @@ class DumperBase():
|
|||||||
return data, size, alloc
|
return data, size, alloc
|
||||||
|
|
||||||
def qArrayData(self, value):
|
def qArrayData(self, value):
|
||||||
|
if self.qtVersion() >= 0x60000:
|
||||||
|
dd, data, size = self.split('ppi', value)
|
||||||
|
if dd:
|
||||||
|
alloc, i, i = self.split('Pii', dd)
|
||||||
|
else: # fromRawData
|
||||||
|
alloc = size
|
||||||
|
return data, size, alloc
|
||||||
return self.qArrayDataHelper(self.extractPointer(value))
|
return self.qArrayDataHelper(self.extractPointer(value))
|
||||||
|
|
||||||
def qArrayDataHelper(self, array_data_ptr):
|
def qArrayDataHelper(self, array_data_ptr):
|
||||||
@@ -701,14 +708,6 @@ class DumperBase():
|
|||||||
return self.encodedUtf16ToUtf8(self.encodeString(value, limit))
|
return self.encodedUtf16ToUtf8(self.encodeString(value, limit))
|
||||||
|
|
||||||
def stringData(self, value): # -> (data, size, alloc)
|
def stringData(self, value): # -> (data, size, alloc)
|
||||||
if self.qtVersion() >= 0x60000:
|
|
||||||
dd, data, size = value.split('ppi')
|
|
||||||
if dd:
|
|
||||||
alloc, i, i = self.split('Pii', dd)
|
|
||||||
else: # fromRawData
|
|
||||||
alloc = size
|
|
||||||
return data, size, alloc
|
|
||||||
else:
|
|
||||||
return self.qArrayData(value)
|
return self.qArrayData(value)
|
||||||
|
|
||||||
def extractTemplateArgument(self, typename, position):
|
def extractTemplateArgument(self, typename, position):
|
||||||
@@ -1442,22 +1441,27 @@ class DumperBase():
|
|||||||
|
|
||||||
intSize = 4
|
intSize = 4
|
||||||
ptrSize = self.ptrSize()
|
ptrSize = self.ptrSize()
|
||||||
if self.qtVersion() < 0x050000:
|
if self.qtVersion() >= 0x060000:
|
||||||
# Size of QObjectData: 5 pointer + 2 int
|
# Size of QObjectData: 7 pointer + 2 int
|
||||||
# - vtable
|
# - vtable
|
||||||
# - QObject *q_ptr;
|
# - QObject *q_ptr;
|
||||||
# - QObject *parent;
|
# - QObject *parent;
|
||||||
# - QObjectList children;
|
# - QObjectList children;
|
||||||
# - uint isWidget : 1; etc..
|
# - uint isWidget : 1; etc...
|
||||||
# - int postedEvents;
|
# - int postedEvents;
|
||||||
# - QMetaObject *metaObject;
|
# - QDynamicMetaObjectData *metaObject;
|
||||||
|
extra = self.extractPointer(dd + 7 * ptrSize + 2 * intSize)
|
||||||
|
if extra == 0:
|
||||||
|
return False
|
||||||
|
|
||||||
# Offset of objectName in QObjectPrivate: 5 pointer + 2 int
|
# Offset of objectName in ExtraData: 12 pointer
|
||||||
# - [QObjectData base]
|
# - QList<QByteArray> propertyNames;
|
||||||
|
# - QList<QVariant> propertyValues;
|
||||||
|
# - QVector<int> runningTimers;
|
||||||
|
# - QList<QPointer<QObject> > eventFilters;
|
||||||
# - QString objectName
|
# - QString objectName
|
||||||
objectNameAddress = dd + 5 * ptrSize + 2 * intSize
|
objectNameAddress = extra + 12 * ptrSize
|
||||||
|
elif self.qtVersion() >= 0x050000:
|
||||||
else:
|
|
||||||
# Size of QObjectData: 5 pointer + 2 int
|
# Size of QObjectData: 5 pointer + 2 int
|
||||||
# - vtable
|
# - vtable
|
||||||
# - QObject *q_ptr;
|
# - QObject *q_ptr;
|
||||||
@@ -1478,6 +1482,21 @@ class DumperBase():
|
|||||||
# - QList<QPointer<QObject> > eventFilters;
|
# - QList<QPointer<QObject> > eventFilters;
|
||||||
# - QString objectName
|
# - QString objectName
|
||||||
objectNameAddress = extra + 5 * ptrSize
|
objectNameAddress = extra + 5 * ptrSize
|
||||||
|
else:
|
||||||
|
# Size of QObjectData: 5 pointer + 2 int
|
||||||
|
# - vtable
|
||||||
|
# - QObject *q_ptr;
|
||||||
|
# - QObject *parent;
|
||||||
|
# - QObjectList children;
|
||||||
|
# - uint isWidget : 1; etc..
|
||||||
|
# - int postedEvents;
|
||||||
|
# - QMetaObject *metaObject;
|
||||||
|
|
||||||
|
# Offset of objectName in QObjectPrivate: 5 pointer + 2 int
|
||||||
|
# - [QObjectData base]
|
||||||
|
# - QString objectName
|
||||||
|
objectNameAddress = dd + 5 * ptrSize + 2 * intSize
|
||||||
|
|
||||||
|
|
||||||
data, size, alloc = self.qArrayData(objectNameAddress)
|
data, size, alloc = self.qArrayData(objectNameAddress)
|
||||||
|
|
||||||
|
@@ -1047,9 +1047,9 @@ class Dumper(DumperBase):
|
|||||||
def handleNewObjectFile(self, objfile):
|
def handleNewObjectFile(self, objfile):
|
||||||
name = objfile.filename
|
name = objfile.filename
|
||||||
if self.isWindowsTarget():
|
if self.isWindowsTarget():
|
||||||
qtCoreMatch = re.match(r'.*Qt5?Core[^/.]*d?\.dll', name)
|
qtCoreMatch = re.match(r'.*Qt[56]?Core[^/.]*d?\.dll', name)
|
||||||
else:
|
else:
|
||||||
qtCoreMatch = re.match(r'.*/libQt5?Core[^/.]*\.so', name)
|
qtCoreMatch = re.match(r'.*/libQt[56]?Core[^/.]*\.so', name)
|
||||||
|
|
||||||
if qtCoreMatch is not None:
|
if qtCoreMatch is not None:
|
||||||
self.addDebugLibs(objfile)
|
self.addDebugLibs(objfile)
|
||||||
|
Reference in New Issue
Block a user