Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Marco Bubke
flatpak-qt-creator
Commits
4fb507c0
Commit
4fb507c0
authored
Mar 18, 2010
by
hjk
Browse files
debugger: show at least basic QWidget properties
parent
8bd8d256
Changes
1
Hide whitespace changes
Inline
Side-by-side
share/qtcreator/gdbmacros/gdbmacros.py
View file @
4fb507c0
...
...
@@ -579,16 +579,26 @@ def extractCString(table, offset):
return
result
def
qdump__QWidget
(
d
,
item
):
qdump__QObject
(
d
,
item
)
def
qdump__QObject
(
d
,
item
):
#warn("OBJECT: %s " % item.value)
staticMetaObject
=
item
.
value
[
"staticMetaObject"
]
#warn("SMO: %s " % staticMetaObject)
#warn("SMO DATA: %s " % staticMetaObject["d"]["stringdata"])
superData
=
staticMetaObject
[
"d"
][
"superdata"
]
#warn("SUPERDATA: %s" % superData)
#while not isNull(superData):
# superData = superData.dereference()["d"]["superdata"]
# warn("SUPERDATA: %s" % superData)
privateType
=
gdb
.
lookup_type
(
d
.
ns
+
"QObjectPrivate"
).
pointer
()
d_ptr
=
item
.
value
[
"d_ptr"
][
"d"
].
cast
(
privateType
).
dereference
()
#warn("D_PTR: %s " % d_ptr)
objectName
=
d_ptr
[
"objectName"
]
#warn("OBJECTNAME: %s " % objectName)
#warn("D_PTR: %s " % d_ptr
.dereference()
)
#warn("D_PTR: %s " % d_ptr)
mo
=
d_ptr
[
"metaObject"
]
type
=
d
.
stripNamespaceFromType
(
item
.
value
.
type
)
if
isNull
(
mo
):
...
...
@@ -608,13 +618,16 @@ def qdump__QObject(d, item):
if
d
.
isExpanded
(
item
):
d
.
beginChildren
()
#
p
arent and children
#
P
arent and children
.
d
.
putItem
(
Item
(
d_ptr
[
"parent"
],
item
.
iname
,
"parent"
,
"parent"
))
d
.
putItem
(
Item
(
d_ptr
[
"children"
],
item
.
iname
,
"children"
,
"children"
))
#
p
roperties
#
P
roperties
.
d
.
beginHash
()
propertyCount
=
metaData
[
6
]
#propertyCount = metaData[6]
# FIXME: Replace with plain memory accesses.
propertyCount
=
int
(
call
(
mo
,
"propertyCount()"
))
warn
(
"PROPERTY COUNT: %s"
%
propertyCount
)
propertyData
=
metaData
[
7
]
d
.
putName
(
"properties"
)
d
.
putItemCount
(
propertyCount
)
...
...
@@ -630,28 +643,48 @@ def qdump__QObject(d, item):
d
.
putName
(
propertyName
)
#flags = metaData[offset + 2]
#warn("FLAGS: %s " % flags)
warn
(
"PROPERTY
TYPE:
%s "
%
propertyType
)
#
warn("PROPERTY
: %s
%s " %
(
propertyType
, propertyName)
)
# #exp = '((\'%sQObject\'*)%s)->property("%s")' \
# % (d.ns, item.value.address, propertyName)
#exp = '"((\'%sQObject\'*)%s)"' % (d.ns, item.value.address,)
#warn("EXPRESSION: %s" % exp)
value
=
call
(
item
.
value
,
'property("%s")'
%
propertyName
)
warn
(
"VALUE: %s"
%
value
)
warn
(
"TYPE: %s"
%
value
.
type
)
if
True
and
propertyType
==
"QString"
:
# FIXME: re-use parts of QVariant dumper
#d.putType(d.ns + "QString")
data
=
value
[
"d"
][
"data"
][
"ptr"
]
innerType
=
gdb
.
lookup_type
(
d
.
ns
+
"QString"
)
d
.
putItemHelper
(
Item
(
data
.
cast
(
innerType
),
item
.
iname
,
property
))
#d.putNumChild(0)
#warn("VALUE: %s" % value)
inner
,
innert
=
qdumpHelper__QVariant
(
d
,
value
[
"d"
])
if
len
(
inner
):
# Build-in types.
if
len
(
innert
)
==
0
:
innert
=
inner
d
.
putType
(
inner
)
innerType
=
gdb
.
lookup_type
(
inner
)
val
=
value
[
"d"
][
"data"
][
"ptr"
].
cast
(
innerType
)
d
.
putItemHelper
(
Item
(
val
,
item
.
iname
+
".properties"
,
propertyName
,
propertyName
))
else
:
iname
=
"%s.properties.%s"
%
(
item
.
iname
,
propertyName
)
d
.
putItemHelper
(
Item
(
value
,
iname
,
propertyName
))
# User types.
# func = "typeToName(('%sQVariant::Type')%d)" % (d.ns, variantType)
# type = str(call(item.value, func))
# type = type[type.find('"') + 1 : type.rfind('"')]
# type = type.replace("Q", d.ns + "Q") # HACK!
# data = call(item.value, "constData()")
# tdata = data.cast(gdb.lookup_type(type).pointer()).dereference()
# d.putValue("(%s)" % tdata.type)
# d.putType(tdata.type)
# d.putNumChild(1)
# if d.isExpanded(item):
# d.beginChildren()
# d.putItem(Item(tdata, item.iname, "data", "data"))
# d.endChildren()
warn
(
"FIXME: CUSTOM QOBJECT PROPERTIES NOT IMPLEMENTED: %s %s"
%
(
propertyType
,
innert
))
d
.
putType
(
propertyType
)
d
.
putValue
(
"..."
)
d
.
putNumChild
(
0
)
d
.
endHash
()
d
.
endChildren
()
d
.
endHash
()
# connections
d
.
beginHash
()
...
...
@@ -679,7 +712,7 @@ def qdump__QObject(d, item):
d
.
endChildren
()
d
.
endHash
()
#
s
ignals
#
S
ignals
signalCount
=
metaData
[
13
]
d
.
beginHash
()
d
.
putName
(
"signals"
)
...
...
@@ -703,7 +736,7 @@ def qdump__QObject(d, item):
d
.
endChildren
()
d
.
endHash
()
#
s
lots
#
S
lots
d
.
beginHash
()
slotCount
=
metaData
[
4
]
-
signalCount
d
.
putName
(
"slots"
)
...
...
@@ -991,55 +1024,6 @@ def qdump__QObject(d, item):
# d.disarm()
# }
#
# static void dumpQObjectPropertyList(QDumper &d)
# {
# const QObject *ob = (const QObject *)d.data
# const QMetaObject *mo = ob->metaObject()
# const int propertyCount = mo->propertyCount()
# d.putField("addr", "<synthetic>")
# d.putField("type", ns + "QObjectPropertyList")
# d.putField("numchild", propertyCount)
# d.putItemCount(propertyCount)
# if d.isExpanded(item):
# d.beginChildren()
# for (int i = propertyCount; --i >= 0; ) {
# const QMetaProperty & prop = mo->property(i)
# d.beginHash()
# d.putName(prop.name())
# switch (prop.type()) {
# case QVariant::String:
# d.putField("type", prop.typeName())
# d.putValue(prop.read(ob).toString(), 2)
# d.putField("numchild", "0")
# break
# case QVariant::Bool:
# d.putField("type", prop.typeName())
# d.putValue((prop.read(ob).toBool() ? "true" : "false"))
# d.putField("numchild", "0")
# break
# case QVariant::Int:
# if prop.isEnumType()) {
# dumpMetaEnumValue(d, prop, prop.read(ob).toInt())
# } elif prop.isFlagType()) {
# dumpMetaFlagValue(d, prop, prop.read(ob).toInt())
# } else {
# d.putValue(prop.read(ob).toInt())
# d.putField("numchild", "0")
# }
# break
# default:
# d.putField("addr", d.data)
# d.putField("type", ns + "QObjectProperty")
# d.putField("numchild", "1")
# break
# }
# d.endHash()
# }
# d.endChildren()
# }
# d.disarm()
# }
#
# static void dumpQObjectMethodList(QDumper &d)
# {
# const QObject *ob = (const QObject *)d.data
...
...
@@ -1512,12 +1496,10 @@ def qdump__QTextCodec(d, item):
d
.
putCallItem
(
"mibEnum"
,
item
,
"mibEnum()"
)
d
.
endChildren
()
def
qdump__QVariant
(
d
,
item
):
union
=
item
.
value
[
"d"
]
data
=
union
[
"data"
]
variantType
=
int
(
union
[
"type"
])
def
qdumpHelper__QVariant
(
d
,
d_member
):
#warn("VARIANT TYPE: %s : " % variantType)
data
=
d_member
[
"data"
]
variantType
=
int
(
d_member
[
"type"
])
inner
=
""
innert
=
""
if
variantType
==
0
:
# QVariant::Invalid
...
...
@@ -1526,22 +1508,28 @@ def qdump__QVariant(d, item):
elif
variantType
==
1
:
# QVariant::Bool
d
.
putValue
(
select
(
data
[
"b"
],
"true"
,
"false"
))
d
.
putNumChild
(
0
)
inner
=
"bool"
elif
variantType
==
2
:
# QVariant::Int
d
.
putValue
(
data
[
"i"
])
d
.
putNumChild
(
0
)
inner
=
"int"
elif
variantType
==
3
:
# uint
d
.
putValue
(
data
[
"u"
])
d
.
putNumChild
(
0
)
inner
=
"uint"
elif
variantType
==
4
:
# qlonglong
d
.
putValue
(
data
[
"ll"
])
d
.
putNumChild
(
0
)
inner
=
"qlonglong"
elif
variantType
==
5
:
# qulonglong
d
.
putValue
(
data
[
"ull"
])
d
.
putNumChild
(
0
)
inner
=
"qulonglong"
elif
variantType
==
6
:
# QVariant::Double
value
=
data
[
"d"
]
d
.
putValue
(
data
[
"d"
])
d
.
putNumChild
(
0
)
inner
=
"double"
elif
variantType
==
7
:
# QVariant::QChar
inner
=
d
.
ns
+
"QChar"
elif
variantType
==
8
:
# QVariant::VariantMap
...
...
@@ -1633,6 +1621,10 @@ def qdump__QVariant(d, item):
inner
=
d
.
ns
+
"QVector4D"
elif
variantType
==
86
:
# QVariant::Quadernion
inner
=
d
.
ns
+
"QQuadernion"
return
inner
,
innert
def
qdump__QVariant
(
d
,
item
):
inner
,
innert
=
qdumpHelper__QVariant
(
d
,
item
.
value
[
"d"
])
if
len
(
inner
):
# Build-in types.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment