GDB expression handling can interpret most C
Warning: GDB can only debug C
++code if you use
the proper compiler and the proper debug format. Currently, GDB works best when debugging C
++code that is compiled with the most recent version of GCC possible. The DWARF debugging format is preferred; GCC defaults to this on most popular platforms. Other compilers and/or debug formats are likely to work badly or not at all when using GDB to debug C
++code. See Compilation.
count = aml->GetOriginal(x, y)
thisfollowing the same rules as C
usingdeclarations in the current scope are also respected by GDB.
You can call overloaded functions; GDB resolves the function call to the right definition, with some restrictions. GDB does not perform overload resolution involving user-defined type conversions, calls to constructors, or instantiations of templates that do not exist in the program. It also cannot handle ellipsis argument lists or default arguments.
It does perform integral conversions and promotions, floating-point promotions, arithmetic conversions, pointer conversions, conversions of class objects to base classes, and standard conversions such as those of functions or arrays to pointers; it requires an exact match on the number of function arguments.
Overload resolution is always performed, unless you have specified
set overload-resolution off. See GDB Features for C
You must specify
set overload-resolution off in order to use an
explicit function signature to call an overloaded function, as in
p 'foo(char,int)'('x', 13)
The GDB command-completion facility can simplify this; see Command Completion.
GDB understands variables declared as C
++ lvalue or rvalue
references; you can use them in expressions just as you do in C
source—they are automatically dereferenced.
In the parameter list shown when GDB displays a frame, the values of
reference variables are not displayed (unlike other variables); this
avoids clutter, since references are often used for large structures.
The address of a reference variable is always shown, unless
you have specified ‘
set print address off’.
++name resolution operator
::—your expressions can use it just as expressions in your program do. Since one scope may be defined in another, you can use
::repeatedly if necessary, for example in an expression like ‘
scope1::scope2::name’. GDB also allows resolving name scope by reference to source files, in both C and C
++debugging (see Program Variables).