diff options
Diffstat (limited to 'scripts/kde-devel-gdb')
-rw-r--r-- | scripts/kde-devel-gdb | 299 |
1 files changed, 299 insertions, 0 deletions
diff --git a/scripts/kde-devel-gdb b/scripts/kde-devel-gdb new file mode 100644 index 00000000..bf69d233 --- /dev/null +++ b/scripts/kde-devel-gdb @@ -0,0 +1,299 @@ +# 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. + +# Disable printing of static members. Qt has too many, it clutters the output +set print static-members off + +define printqstring + printqstringdata $arg0.d +end +document printqstring + Prints the contents of a QString +end +define printq4string + printq4stringdata $arg0.d +end +document printq4string + Prints the contents of a Qt 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 $i=0 + set $d = $arg0 + while $i < $d->size + 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 printqstring_utf8 + set $i=0 + set $s = $arg0 + while $i < $s.d->len + set $uc = (unsigned short) $s.d->unicode[$i++].ucs + 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 + printf "\n" +end +document printqstring_utf8 + Prints the contents of a 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 printqmap + 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 printqmap + Prints the full contents of a QMap + Usage: 'printqmap 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 printqmap) +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 + +# 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 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 + + |