Debugging with GDB (September 2007)

172 Debugging with GDB
a warning mes sage that it is setting a deferred breakpoint on foo. If any shared library
is loaded that contains a foo, then GDB sets the breakpoint.
If this is not what you want (for example, if the name was mistyped), then you can
delete the breakpoint.
14.20.3 Using catch load
The catch load <libname > command causes the debugger to stop when the partic-
ular library is loaded. This gives you a chance to set breakp oints before routines are
executed.
14.20.4 Privatel y mapping shared libraries
In cases where you attach to a running program and you try to set a breakpoint in a
shared library, GDB may generate the following message:
The shared libraries were not privately mapped; setting a breakpoint
in a shared library will not work until you rerun the program.
GDB generates this message because the debugger sets breakpoints by replacing an
instruction with a BREAK instruction. The debugger cannot set a breakpoint in a shared
library because doing so can affect other processes on the system in addition to the
process being debugged.
To set the breakpoint you must kill the program and then rerun it so that the dynamic
linker maps a copy of the shared library privately. There are two ways to run the
program:
Rerun the program under GDB to have the debugger cause dld to map all shared
libraries as private, enabling breakpoint debugging.
On PA-RISC systems, use the following command on an e xecutable:
/opt/langtools/bin/pxdb -s on executable-name
The pxdb -s on command marks the executable so that dld maps shared libraries
as private when the program starts up.
You can verify the status of the shared library with this command:
/opt/langtools/bin/pxdb -s status executable-name
On both PA-RISC and IA64 systems, use the following command on an executable:
chatr +dbg enable executable-name
This is similar to the pxdb command described above wherein it directs the dld
to load the shared libraries as private when the program starts up.
14.20.5 Selectively Mapping Shared Libraries As Private
The -mapshared option suppresses mapping all shared libraries in a process private.
This option enables new functions in the dynamic loader (patch PHSSS_33110 or later)
to designate individual shared libraries for debugging. By default, HP WDB instructs
the shared library dynamic loader, dld.sl(5), to map shared libraries in a process