1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447
|
# This file defines handy gdb macros for printing out Qt types
# To use it, add this line to your ~/.gdbinit :
# source /path/to/kde/sources/kdesdk/scripts/kde-devel-gdb
# Please don't use tabs in this file. When pasting a
# macro definition to gdb, tabs are interpreted as completion.
# Note for macro development: when working a macro,
# disable the confirmation before gdb allows to redefine a macro, using "set confirm 0".
# Disable printing of static members. Qt has too many, it clutters the output
set print static-members off
# Remember history over restarts
set history save
set history filename ~/.gdb_history
# Show the real classname of object instances - e.g. (Kded *) 0x8073440 instead of (class QObject *) 0x8073440
set print object
define printqstring
printqstringdata ($arg0).d
end
document printqstring
Prints the contents of a Qt3 QString
end
define printq4string
printq4stringdata ($arg0).d
end
document printq4string
Prints the contents of a Qt4 QString
end
define printq5string
printq5stringdata ($arg0).d
end
document printq5string
Prints the contents of a Qt5 QString
end
define printqstringdata
set $i=0
set $d = (QStringData *)($arg0)
while $i < $d->len
printf "%c", (char)($d->unicode[$i++].ucs & 0xff)
end
printf "\n"
end
document printqstringdata
Prints the contents of a QStringData
This is useful when the output of another command (e.g. printqmap)
shows {d = 0xdeadbeef} for a QString, i.e. the qstringdata address
instead of the QString object itself.
printqstring $s and printqstringdata $s.d are equivalent.
end
define printq4stringdata
set $d = ('QString::Data'*) $arg0
set $i = 0
# abort after a '-1' character, to avoid going on forever when printing a garbage string
while $i < $d->size && ($i == 0 || (char)$d->data[$i-1] != -1)
printf "%c", (char)($d->data[$i++] & 0xff)
end
printf "\n"
end
document printq4stringdata
Prints the contents of a Qt4 QString::Data
This is useful when the output of another command (e.g. printqmap)
shows {d = 0xdeadbeef} for a QString, i.e. the qstringdata address
instead of the QString object itself.
printq4string $s and printq4stringdata $s.d are equivalent.
end
define printq5stringdata
set $d = ('QString::Data'*) $arg0
set $data_char = (char*)$d + $d->offset
set $data = (unsigned short*) $data_char
set $size = $d->size
set $i = 0
while $i < $size
set $c = (char)($data[$i++] & 0xff)
printf "%c", $c
# abort after a '-1' character, to avoid going on forever when printing a garbage string
if $i != 0 && $c == -1
printf "\n<output terminated: junk data?>"
loop_break
end
end
printf "\n"
end
document printq5stringdata
Prints the contents of a Qt5 QString::Data
This is useful when the output of another command (e.g. printqmap)
shows {d = 0xdeadbeef} for a QString, i.e. the qstringdata address
instead of the QString object itself.
printq5string $s and printq5stringdata $s.d are equivalent.
end
define print_utf8_char
set $uc = $arg0
if ( $uc < 0x80 )
printf "%c", (unsigned char)($uc & 0x7f)
else
if ( $uc < 0x0800 )
printf "%c", (unsigned char)(0xc0 | ($uc >> 6))
else
printf "%c", (unsigned char)(0xe0 | ($uc >> 12)
printf "%c", (unsigned char)(0x80 | (($uc > 6) &0x3f)
end
printf "%c", (unsigned char)(0x80 | ((uchar) $uc & 0x3f))
end
end
document print_utf8_char
Prints a unicode value (stored as an unsigned short) as UTF-8.
end
define printqstring_utf8
set $i=0
set $s = $arg0
while $i < $s.d->len
set $uc = (unsigned short) $s.d->unicode[$i++].ucs
print_utf8_char $uc
end
printf "\n"
end
document printqstring_utf8
Prints the contents of a Qt3 QString encoded in utf8.
Nice if you run your debug session in a utf8 enabled terminal.
end
define printq4string_utf8
set $i=0
set $s = $arg0
while $i < $s.d->size
set $uc = (unsigned short) $s.d->data[$i++]
print_utf8_char $uc
end
printf "\n"
end
document printq4string_utf8
Prints the contents of a Qt4 QString encoded in utf8.
Nice if you run your debug session in a utf8 enabled terminal.
end
define printq5string_utf8
set $i=0
set $s = $arg0
set $d = $s.d
set $data_char = (char*)$d + $d->offset
set $data = (unsigned short*) $data_char
set $size = $d->size
while $i < $size
print_utf8_char $data[$i++]
end
printf "\n"
end
document printq5string_utf8
Prints the contents of a Qt5 QString encoded in utf8.
Nice if you run your debug session in a utf8 enabled terminal.
end
define printqcstring
print ($arg0).shd.data
print ($arg0).shd.len
end
document printqcstring
Prints the contents of a QCString (char * data, then length)
end
define printq4bytearray
print ($arg0)->d->data
end
document printq4bytearray
Prints the contents of a Qt4 QByteArray (when it contains a string)
end
define printqfont
print *($arg0).d
printqstring ($arg0).d->request.family
print ($arg0).d->request.pointSize
end
document printqfont
Prints the main attributes from a QFont, in particular the requested
family and point size
end
define printqcolor
printf "(%d,%d,%d)\n", ($arg0).red(), ($arg0).green(), ($arg0).blue()
end
document printqcolor
Prints a QColor as (R,G,B).
Usage: 'printqcolor <QColor col>
end
define printqmemarray
# Maybe we could find it out the type by parsing "whatis $arg0"?
set $arr = $arg0
set $sz = sizeof($arg1)
set $len = $arr->shd->len / $sz
output $len
printf " items in the array\n"
set $i = 0
while $i < $len
# print "%s[%d] = %s\n", $arr, $i, *($arg1 *)(($arr->vec)[$i])
print *($arg1 *)(($arr->shd->data) + ($i * $sz))
set $i++
end
end
document printqmemarray
Prints the contents of a QMemArray. Pass the type as second argument.
end
define printqptrvector
# Maybe we could find it out the type by parsing "whatis $arg0"?
set $arr = $arg0
set $len = $arr->len
output $len
printf " items in the vector\n"
set $i = 0
while $i < $len
# print "%s[%d] = %s\n", $arr, $i, *($arg1 *)(($arr->vec)[$i])
print *($arg1 *)(($arr->vec)[$i])
set $i++
end
end
document printqptrvector
Prints the contents of a QPtrVector. Pass the type as second argument.
end
define printqptrvectoritem
set $arr = $arg0
set $i = $arg2
print ($arg1 *)(($arr->vec)[$i])
print *($arg1 *)(($arr->vec)[$i])
end
document printqptrvectoritem
Print one item of a QPtrVector
Usage: printqptrvectoritem vector type index
end
define printq3map
set $map = $arg0
set $len = $map.sh->node_count
output $len
printf " items in the map\n"
set $header = $map.sh->header
# How to parse the key and value types from whatis?
set $it = (QMapNode<$arg1,$arg2> *)($header->left)
while $it != $header
printf " key="
output $it->key
printf " value="
output $it->data
printf "\n"
_qmapiterator_inc $it
set $it = (QMapNode<$arg1,$arg2> *)($ret)
end
end
document printq3map
Prints the full contents of a Qt 3 QMap
Usage: 'printq3map map keytype valuetype'
end
define printq4map
set $map = $arg0
set $len = $map.d->size
output $len
printf " items in the map\n"
set $it = $map.e->forward[0]
set $_qmap_end = $map.e
## Requires a process...
set $_qmap_payload = $map->payload()
while $it != $map.e
set $_qmap_nodeaddress = (char*)($it) - $_qmap_payload
set $_qmap_node = ('QMap<$arg1,$arg2>::Node' *)($_qmap_nodeaddress)
printf " key="
output $_qmap_node->key
printf " value="
output $_qmap_node->value
printf "\n"
# just in case the key and/or the value is a qstring, try printq4string on it
# (if this is too noisy with other types, remove it, and use
# printq4stringdata on the shown d pointers instead, by hand)
printq4string $_qmap_node->key
printq4string $_qmap_node->value
set $it = $it->forward[0]
end
end
document printq4map
Prints the full contents of a Qt 4 QMap
Usage: 'printq4map map keytype valuetype'
end
define _qmapiterator_inc
set $ret = $arg0
if $ret->right != 0
set $ret = $ret->right
while $ret->left != 0
set $ret = $ret->left
end
else
set $y = $ret->parent
while $ret == $y->right
set $ret = $y
set $y = $y->parent
end
if $ret->right != $y
set $ret = $y
end
end
end
document _qmapiterator_inc
Increment a qmap iterator (internal method, used by printq3map)
end
define printqptrlist
set $list = $arg0
set $len = $list.numNodes
output $len
printf " items in the list\n"
set $it = $list.firstNode
while $it != 0
output $it->data
printf "\n"
set $it = $it->next
end
end
document printqptrlist
Prints the contents of a QPtrList.
Usage: printqptrlist mylist
end
define printqvaluelist
set $list = $arg0
set $len = $list.sh->nodes
output $len
printf " items in the list\n"
set $it = $list.sh->node->next
set $end = $list.sh->node
while $it != $end
output $it->data
printf "\n"
set $it = $it->next
end
end
document printqvaluelist
Prints the contents of a QValueList.
Usage: printqvaluelist mylist
end
define printqstringlist
set $list = $arg0
set $len = $list.sh->nodes
output $len
printf " items in the list\n"
set $it = $list.sh->node->next
set $end = $list.sh->node
while $it != $end
printqstring $it->data
set $it = $it->next
end
end
document printqstringlist
Prints the contents of a QStringList.
Usage: printqstringlist mylist
end
define printqregion
printqmemarray ($arg0).rects() QRect
end
document printqregion
Prints the rectangles that make up a QRegion. Needs a running process.
Usage: printqregion myregion
end
# Bad implementation, requires a running process.
# Needs to be refined, i.e. figuring out the right void* pointers casts.
# Simon says: each Node contains the d pointer of the QString.
define printq4stringlist
# This is ugly, but we need to avoid conflicts with printq4string's own vars...
set $q4sl_i = 0
set $q4sl_d = & $arg0
set $q4sl_sz = $q4sl_d->size()
while $q4sl_i < $q4sl_sz
output $q4sl_i
printf " "
printq4string $q4sl_d->at($q4sl_i++)
end
end
document printq4stringlist
Prints the contents of a Qt4 QStringList.
Usage: printq4stringlist mylist
end
define identifyq4object
set $obj=$arg0
set $objectName=((QObjectPrivate *)($obj->d_ptr))->objectName
printf " name:"
printq4string $objectName
printf " class:"
# this requires a process, though
print $obj->metaObject()->className()
end
# You print QString's too often to type the long name :-)
define qs5
printq5string $arg0
end
define qs4
printq4string $arg0
end
define qs3
printqstring $arg0
end
define printqdatetime
printqdate ($arg0).d
printqtime ($arg0).t
end
document printqdatetime
Prints a QDateTime
Usage: printqdatetime myqdt
end
define printqdate
printf "(Y:%d M:%d D:%d)\n", ($arg0).year(), ($arg0).month(), ($arg0).day()
end
document printqdate
Prints a QDate
Usage: printqdate mydate
end
define printqtime
printf "(H:%d M:%d S:%d)\n", ($arg0).hour(), ($arg0).minute(), ($arg0).second()
end
document printqtime
Prints a QTime
Usage: printqtime mytime
end
# You are at f(g(h(i(), j(k(l())...) and you want to enter f: type fs <enter> <enter> <enter>
# fs=finish+step
define fs
finish
step
end
|