KDbg's type table
KDbg's type tables are located under $KDEDIR/share/apps/kdbg/types.
By convention, there is one table for each library like Qt, kdecore, X11,
etc. The files are named after the library file and end with .kdbgtt.
Example: The type table for libqt.a is named qt.kdbgtt.
A type table file obeys the regular KDE configuration file syntax. The
file has the following groups:
-
A group [Type Table] which lists the types and information how
the debugger can identify whether the program is linked against the library.
-
A group for each type which has information about how the value of such
a type is displayed by KDbg.
The [Type Table] group
This group contains the following entries:
-
Types1, Types2, etc. These entries name the types. Each
of them is a comma-separated list of type names. Each of the entries can
list any number of types. (The types names can be distributed to several
lines just so that the lines don't get excessivly long.) No blank space
is allowed in these lines. The entries must be numbered consecutively (KDbg
stops reading at the first gap), although an entry may be empty (i.e. contain
no type at all). Sometimes the order in which the names are listed is important
(see Alias types below).
-
One of the following:
IdentifyingType or
IdentifyingVariable or
IdentifyingPrint and IndentifyingPrintResult
-
These entries tell KDbg how it can determine whether the program is linked
against the library (to which this type table applies). IdentifyingType
names a sufficiently unique type. IdentifyingVariable names a
(global) variable of the library. IdentifyingPrint is a print
statement (e.g. a variable that contains a version number) and IdentifyingPrintResult
is a regular expression that must match the print statement's result.
Currently this information is not used. KDbg just assumes
that the program is linked against this library - so in effect, all type
tables available are applied for every program. This usually doesn't hurt
as long as there are no overlapping type names.
The type's group
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:
-
Display determines how the value of the type is displayed by KDbg.
The string must contain 1 to 5 percent characters '%'. These are
replaced by the results of the expressions printed by the Exprx
entries.
-
One or more of Expr1, Expr2, etc. Each of them must contain
exactly one %s sequence, which will be replaced by the
expression whose value is investigate. The so constructed expressions is
submitted to gdb, and the result substituted back for the corresponding
percent character in the Display string.
-
Alias names an alias type. If this entry is present, the type
is treated like the specified type. That alias type must appear before
this type in the Typesx entries in the Type Table.
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.
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.
An example
The example shows how QString and QObject are defined
in qt.kdbgtt. Additionally, QTableView is defined as
an alias of QObject.
[Type Table]
Types1=QString
Types2=QObject,QTableView
[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.