Debugging with GDB (September 2007)

Chapter 12: GDB Files 107
For example, if you want GDB to search for libraries in /home/debugger/lib and
/tmp/lib before searching the default system directories for libraries, you can use this
setting:
GDB_SHLIB_PATH=/home/debugger/lib:/tmp/lib
With this setting, GDB searches the directories in the order sp ec ified until it finds a
library with the correct name.
In this example, if GDB encounters a library by the name of /usr/lib/libsubs.sl’,
GDB searches first for /home/debugger/lib/libsubs.sl and then for
/tmp/lib/libsubs.sl’. If neither of these exists, then GDB searches the
default system directories and finds /usr/lib/libsubs.sl’.
In most cases, GDB_SHLIB_PATH allows more flexibility than GDB_SHLIB_ROOT because
it allows you to specify more than one path. However, there are some cases in which you
may want to choose to use GDB_SHLIB_ROOT’.
For example, if you have more than one shared library with the same name but different
path names, you may want to use GDB_SHLIB_ROOT because GDB searches for libraries
based on the full path name.
Note that GDB_SHLIB_PATH may not give you the results you expect because GDB
searches for libraries that match only the name, regardless of the path, and always accepts
the first library that matches the name.
For example, if you want to use /tmp/usr/lib/libsubs.sl and /tmp/usr/share/lib/libsubs.sl’,
you can set GDB_SHLIB_ROOT to /tmp’. Now wheneve r GDB encounters a library with
the name /usr/lib/libsubs.sl and /usr/share/lib/libsubs.sl’, GDB looks at
/tmp/usr/lib/libsubs.sl and /tmp/usr/share/lib/libsubs.sl respectively.
12.3 Errors reading symbol files
While reading a symbol file, GDB occasionally encounters problems, such as symbol
types it does not recognize, or known bugs in compiler output. By default, GDB does not
notify you of such problems, since they are relatively common and primarily of interest to
people debugging compilers. If you are interested in seeing information about ill-constructed
symbol tables, you can either ask GDB to print only one message about each such type of
problem, no matter how many times the problem occurs; or you can ask GDB to print more
messages, to see how many times the problems occur, with the set complaints command
(see Section 17.6 [Optional warnings and messages], page 248).
The messages currently printed, and their meanings, include:
inner block not inside outer block in symbol
The symbol information shows where symbol scopes begin and end (such as at
the start of a function or a block of statements). This error indicates that an
inner scope block is not fully contained in its outer scope blocks.
GDB circumvents the problem by treating the inner block as if it had the
same scope as the outer block. In the error message, symbol may be shown as
(don’t know) if the outer block is not a function.