KDbg can display the contents of single members of structured types, so that it is not necessary to expand the variable in the local variables window or watched expressions window. The information which member variable is displayed is stored in type tables. There is generally one type table per shared library.
KDbg's type tables are located under $prefix/share/apps/kdbg/types. The file names end with .kdbgtt. Example: The type table for libqt.so is named qt.kdbgtt.
A type table file obeys the regular KDE configuration file syntax. The file has the following groups:
In order to determine which type tables apply to the program being debugged KDbg lists the shared libraries it is linked to. Then it matches the names against the ShlibRE entries of all type tables. Those that match are used. If a type appears in several type tables, it is unspecified which one will be used.
KDbg's type recognition only works for libraries that are linked dynamically to the program being debugged.
This group contains the following entries:
There is one group for each type that is named exactly as the type. At the moment C++ template classes are not supported. Each group contains the following entries:
Currently the number of expressions per type is limited to 5. This can easily be changed if it's too restrictive, but I recommend not to go to that limit at all - it will slow down the debugging process.
KDbg recognizes a special extension that is used to display Qt 2.x's and Qt 3.x's unicode strings: If an Exprx is prepended with /QString::Data, it is assumed that the result of the expression is a pointer to a QString::Data. The value displayed is the unicode string that this instance of QString::Data represents (which can be QString::null if it is Qt's well-defined null string or (null) if the unicode member is the null pointer). See qt2.kdbgtt for examples.
Tip: It is not necessary to define derived types if they ought to be treated the same as the base class - KDbg can deduce derived types and uses the type specification of the (leftmost) base class. You can use the Alias entry to quickly specify that a type should be treated like a non-leftmost base class for a multiple-inheritance class.
The example shows how QString and QObject are defined in qt.kdbgtt. Additionally, QTableView is defined as an alias of QObject. This example applies to Qt 1.x, which is located in shared library whose name ends in libqt.so.1.
[Type Table] Types1=QString Types2=QObject,QTableView LibDisplayName=libqt 1.x ShlibRE=libqt\.so\.1$ [QString] Display={ % } Expr1=(%s).shd->data [QObject] Display={ name=% #chld=% } Expr1=(%s).objname Expr2=(%s).childObjects->numNodes [QTableView] Alias=QObject
Note that it is safer to wrap the %s in parentheses.