From 7ba935c44b38a16290ef96e6475a09b4be77a468 Mon Sep 17 00:00:00 2001 From: Eike Ziller <eike.ziller@digia.com> Date: Sat, 26 Oct 2013 19:56:50 +0200 Subject: [PATCH] debugger: Fix QDir dumper for Qt4 64bit Also make the structure more self-explained Change-Id: Ia5080f4e07e2a8b7c6b18e1353a4cf1cf3488361 Reviewed-by: hjk <hjk121@nokiamail.com> --- share/qtcreator/debugger/qttypes.py | 51 ++++++++++++++++++----------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index 09225f91e48..e28df11ea31 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -289,36 +289,49 @@ def qdump__QDir(d, value): privAddress = d.dereferenceValue(value) bit32 = d.is32bit() qt5 = d.qtVersion() >= 0x050000 - # value.d_ptr.d.dirEntry.m_filePath - value.d_ptr.d - offset = (32 if bit32 else 56) if qt5 else 36 - filePathAddress = privAddress + offset - #try: - # # Up to Qt 4.7 - # d.putStringValue(data["path"]) - #except: - # # Qt 4.8 and later. - # d.putStringValue(data["dirEntry"]["m_filePath"]) - d.putStringValueByAddress(filePathAddress) + # QDirPrivate: + # QAtomicInt ref + # QStringList nameFilters; + # QDir::SortFlags sort; + # QDir::Filters filters; + # // qt3support: + # QChar filterSepChar; + # bool matchAllDirs; + # // end qt3support + # QScopedPointer<QAbstractFileEngine> fileEngine; + # bool fileListsInitialized; + # QStringList files; + # QFileInfoList fileInfos; + # QFileSystemEntry dirEntry; + # QFileSystemEntry absoluteDirEntry; + qt3SupportAddition = 0 if qt5 else d.ptrSize() # qt5 doesn't have qt3support + filesOffset = (24 if bit32 else 40) + qt3SupportAddition + fileInfosOffset = filesOffset + d.ptrSize() + dirEntryOffset = fileInfosOffset + d.ptrSize() + # QFileSystemEntry: + # QString m_filePath + # QByteArray m_nativeFilePath + # qint16 m_lastSeparator + # qint16 m_firstDotInFileName + # qint16 m_lastDotInFileName + # + 2 byte padding + fileSystemEntrySize = 2 * d.ptrSize() + 8 + absoluteDirEntryOffset = dirEntryOffset + fileSystemEntrySize + d.putStringValueByAddress(privAddress + dirEntryOffset) if d.isExpanded(): with Children(d): d.call(value, "count") # Fill cache. #d.putCallItem("absolutePath", value, "absolutePath") #d.putCallItem("canonicalPath", value, "canonicalPath") with SubItem(d, "absolutePath"): - # value.d_ptr.d.absoluteDirEntry.m_filePath - value.d_ptr.d - offset = (48 if bit32 else 80) if qt5 else 36 typ = d.lookupType(d.ns + "QString") - d.putItem(d.createValue(privAddress + offset, typ)) + d.putItem(d.createValue(privAddress + absoluteDirEntryOffset, typ)) with SubItem(d, "entryInfoList"): - # value.d_ptr.d.fileInfos - value.d_ptr.d - offset = (28 if bit32 else 48) if qt5 else 32 typ = d.lookupType(d.ns + "QList<" + d.ns + "QFileInfo>") - d.putItem(d.createValue(privAddress + offset, typ)) + d.putItem(d.createValue(privAddress + fileInfosOffset, typ)) with SubItem(d, "entryList"): - # d.ptr.d.files - value.d_ptr.d - offset = (24 if bit32 else 40) if qt5 else 28 typ = d.lookupType(d.ns + "QStringList") - d.putItem(d.createValue(privAddress + offset, typ)) + d.putItem(d.createValue(privAddress + filesOffset, typ)) def qdump__QFile(d, value): -- GitLab