[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
While nearly all GDB commands are available for all native and cross versions of the debugger, there are some exceptions. This chapter describes things that are only available in certain configurations.
There are three major categories of configurations: native configurations, where the host and target are the same, embedded operating system configurations, which are usually the same for several different processor architectures, and bare embedded processors, which are quite different from each other.
18.1 Native 18.2 Embedded Operating Systems 18.3 Embedded Processors 18.4 Architectures
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This section describes details specific to particular native configurations.
18.1.1 HP-UX 18.1.2 BSD libkvm Interface Debugging BSD kernel memory images 18.1.3 SVR4 Process Information SVR4 process information 18.1.4 Features for Debugging DJGPP Programs Features specific to the DJGPP port 18.1.5 Features for Debugging MS Windows PE Executables Features specific to the Cygwin port 18.1.6 Commands Specific to GNU Hurd Systems Features specific to GNU Hurd 18.1.7 QNX Neutrino Features specific to QNX Neutrino
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
On HP-UX systems, if you refer to a function or variable name that begins with a dollar sign, GDB searches for a user or system name first, before it searches for a convenience variable.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
BSD-derived systems (FreeBSD/NetBSD/OpenBSD) have a kernel memory
interface that provides a uniform interface for accessing kernel virtual
memory images, including live systems and crash dumps. GDB
uses this interface to allow you to debug live kernels and kernel crash
dumps on many native BSD configurations. This is implemented as a
special kvm
debugging target. For debugging a live system, load
the currently running kernel into GDB and connect to the
kvm
target:
(gdb) target kvm |
For debugging crash dumps, provide the file name of the crash dump as an argument:
(gdb) target kvm /var/crash/bsd.0 |
Once connected to the kvm
target, the following commands are
available:
kvm pcb
kvm proc
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Many versions of SVR4 and compatible systems provide a facility called
`/proc' that can be used to examine the image of a running
process using file-system subroutines. If GDB is configured
for an operating system with this facility, the command info
proc
is available to report information about the process running
your program, or about any process running on your system. info
proc
works only on SVR4 systems that include the procfs
code.
This includes, as of this writing, GNU/Linux, OSF/1 (Digital
Unix), Solaris, Irix, and Unixware, but not HP-UX, for example.
info proc
info proc process-id
On some systems, process-id can be of the form `[pid]/tid' which specifies a certain thread ID within a process. If the optional pid part is missing, it means a thread from the process being debugged (the leading `/' still needs to be present, or else GDB will interpret the number as a process ID rather than a thread ID).
info proc mappings
info proc stat
info proc status
info proc all
info proc
subcommands.
set procfs-trace
procfs
API calls.
show procfs-trace
procfs
API call tracing.
set procfs-file file
procfs
API trace to the named
file. GDB appends the trace info to the previous
contents of the file. The default is to display the trace on the
standard output.
show procfs-file
procfs
API trace is written.
proc-trace-entry
proc-trace-exit
proc-untrace-entry
proc-untrace-exit
syscall
interface.
info pidlist
info meminfo
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
DJGPP is a port of the GNU development tools to MS-DOS and MS-Windows. DJGPP programs are 32-bit protected-mode programs that use the DPMI (DOS Protected-Mode Interface) API to run on top of real-mode DOS systems and their emulations.
GDB supports native debugging of DJGPP programs, and defines a few commands specific to the DJGPP port. This subsection describes those commands.
info dos
info dos sysinfo
info dos gdt
info dos ldt
info dos idt
A typical DJGPP program uses 3 segments: a code segment, a data segment (used for both data and the stack), and a DOS segment (which allows access to DOS/BIOS data structures and absolute addresses in conventional memory). However, the DPMI host will usually define additional segments in order to support the DPMI environment.
These commands allow to display entries from the descriptor tables. Without an argument, all entries from the specified table are displayed. An argument, which should be an integer expression, means display a single entry whose index is given by the argument. For example, here's a convenient way to display information about the debugged program's data segment:
|
This comes in handy when you want to see whether a pointer is outside the data segment's limit (i.e. garbled).
info dos pde
info dos pte
Without an argument, info dos pde displays the entire Page Directory, and info dos pte displays all the entries in all of the Page Tables. An argument, an integer expression, given to the info dos pde command means display only that entry from the Page Directory table. An argument given to the info dos pte command means display entries from a single Page Table, the one pointed to by the specified entry in the Page Directory.
These commands are useful when your program uses DMA (Direct Memory Access), which needs physical addresses to program the DMA controller.
These commands are supported only with some DPMI servers.
info dos address-pte addr
i
is stored:
|
This says that i
is stored at offset 0xd30
from the page
whose physical base address is 0x02698000
, and shows all the
attributes of that page.
Note that you must cast the addresses of variables to a char *
,
since otherwise the value of __djgpp_base_address
, the base
address of all variables and functions in a DJGPP program, will
be added using the rules of C pointer arithmetics: if i
is
declared an int
, GDB will add 4 times the value of
__djgpp_base_address
to the address of i
.
Here's another example, it displays the Page Table entry for the transfer buffer:
|
(The + 3
offset is because the transfer buffer's address is the
3rd member of the _go32_info_block
structure.) The output
clearly shows that this DPMI server maps the addresses in conventional
memory 1:1, i.e. the physical (0x00029000
+ 0x110
) and
linear (0x29110
) addresses are identical.
This command is supported only with some DPMI servers.
In addition to native debugging, the DJGPP port supports remote debugging via a serial data link. The following commands are specific to remote serial debugging in the DJGPP port of GDB.
set com1base addr
set com1irq irq
IRQ
) line to use
for the `COM1' serial port.
There are similar commands `set com2base', `set com3irq',
etc. for setting the port address and the IRQ
lines for the
other 3 COM ports.
The related commands `show com1base', `show com1irq' etc.
display the current settings of the base address and the IRQ
lines used by the COM ports.
info serial
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GDB supports native debugging of MS Windows programs, including DLLs with and without symbolic debugging information. There are various additional Cygwin-specific commands, described in this section. Working with DLLs that have no debugging symbols is described in 18.1.5.1 Support for DLLs without Debugging Symbols.
info w32
info w32 selector
GetThreadSelectorEntry
function.
It takes an optional argument that is evaluated to
a long value to give the information about this given selector.
Without argument, this command displays information
about the six segment registers.
info dll
info shared
.
dll-symbols
set cygwin-exceptions mode
on
, GDB will break on exceptions that
happen inside the Cygwin DLL. If mode is off
,
GDB will delay recognition of exceptions, and may ignore some
exceptions which seem to be caused by internal Cygwin DLL
"bookkeeping". This option is meant primarily for debugging the
Cygwin DLL itself; the default value is off
to avoid annoying
GDB users with false SIGSEGV
signals.
show cygwin-exceptions
set new-console mode
on
the debuggee will
be started in a new console on next start.
If mode is off
i, the debuggee will
be started in the same console as the debugger.
show new-console
set new-group mode
show new-group
set debugevents
OutputDebugString
API call.
set debugexec
set debugexceptions
set debugmemory
set shell
show shell
18.1.5.1 Support for DLLs without Debugging Symbols Support for DLLs without debugging symbols
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Very often on windows, some of the DLLs that your program relies on do not include symbolic debugging information (for example, `kernel32.dll'). When GDB doesn't recognize any debugging symbols in a DLL, it relies on the minimal amount of symbolic information contained in the DLL's export table. This section describes working with such symbols, known internally to GDB as "minimal symbols".
Note that before the debugged program has started execution, no DLLs
will have been loaded. The easiest way around this problem is simply to
start the program -- either by setting a breakpoint or letting the
program run once to completion. It is also possible to force
GDB to load a particular DLL before starting the executable ---
see the shared library information in 15.1 Commands to Specify Files, or the
dll-symbols
command in 18.1.5 Features for Debugging MS Windows PE Executables. Currently,
explicitly loading symbols from a DLL with no debugging information will
cause the symbol names to be duplicated in GDB's lookup table,
which may adversely affect symbol lookup performance.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
In keeping with the naming conventions used by the Microsoft debugging
tools, DLL export symbols are made available with a prefix based on the
DLL name, for instance KERNEL32!CreateFileA
. The plain name is
also entered into the symbol table, so CreateFileA
is often
sufficient. In some cases there will be name clashes within a program
(particularly if the executable itself includes full debugging symbols)
necessitating the use of the fully qualified name when referring to the
contents of the DLL. Use single-quotes around the name to avoid the
exclamation mark ("!") being interpreted as a language operator.
Note that the internal name of the DLL may be all upper-case, even
though the file name of the DLL is lower-case, or vice-versa. Since
symbols within GDB are case-sensitive this may cause
some confusion. If in doubt, try the info functions
and
info variables
commands or even maint print msymbols
(see section 13. Examining the Symbol Table). Here's an example:
(gdb) info function CreateFileA All functions matching regular expression "CreateFileA": Non-debugging symbols: 0x77e885f4 CreateFileA 0x77e885f4 KERNEL32!CreateFileA |
(gdb) info function ! All functions matching regular expression "!": Non-debugging symbols: 0x6100114c cygwin1!__assert 0x61004034 cygwin1!_dll_crt0@0 0x61004240 cygwin1!dll_crt0(per_process *) [etc...] |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Symbols extracted from a DLL's export table do not contain very much type information. All that GDB can do is guess whether a symbol refers to a function or variable depending on the linker section that contains the symbol. Also note that the actual contents of the memory contained in a DLL are not available unless the program is running. This means that you cannot examine the contents of a variable or disassemble a function within a DLL without a running program.
Variables are generally treated as pointers and dereferenced automatically. For this reason, it is often necessary to prefix a variable name with the address-of operator ("&") and provide explicit type information in the command. Here's an example of the type of problem:
(gdb) print 'cygwin1!__argv' $1 = 268572168 |
(gdb) x 'cygwin1!__argv' 0x10021610: "\230y\"" |
And two possible solutions:
(gdb) print ((char **)'cygwin1!__argv')[0] $2 = 0x22fd98 "/cygdrive/c/mydirectory/myprogram" |
(gdb) x/2x &'cygwin1!__argv' 0x610c0aa8 <cygwin1!__argv>: 0x10021608 0x00000000 (gdb) x/x 0x10021608 0x10021608: 0x0022fd98 (gdb) x/s 0x0022fd98 0x22fd98: "/cygdrive/c/mydirectory/myprogram" |
Setting a break point within a DLL is possible even before the program starts execution. However, under these circumstances, GDB can't examine the initial instructions of the function in order to skip the function's frame set-up code. You can work around this by using "*&" to set the breakpoint at a raw memory address:
(gdb) break *&'python22!PyOS_Readline' Breakpoint 1 at 0x1e04eff0 |
The author of these extensions is not entirely convinced that setting a break point within a shared DLL like `kernel32.dll' is completely safe.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This subsection describes GDB commands specific to the GNU Hurd native debugging.
set signals
set sigs
sigs
is a shorthand alias for
signals
.
show signals
show sigs
set signal-thread
set sigthread
libc
signal
thread. That thread is run when a signal is delivered to a running
process. set sigthread
is the shorthand alias of set
signal-thread
.
show signal-thread
show sigthread
set stopped
SIGSTOP
signal. The stopped process can be
continued by delivering a signal to it.
show stopped
set exceptions
show exceptions
set task pause
set thread default pause on
or set
thread pause on
(see below) to pause individual threads.
show task pause
set task detach-suspend-count
show task detach-suspend-count
set task exception-port
set task excp
set task excp
is a shorthand alias.
set noninvasive
set task pause
, set exceptions
, and
set signals
to values opposite to the defaults.
info send-rights
info receive-rights
info port-rights
info port-sets
info dead-names
info ports
info psets
info ports
for info
port-rights
and info psets
for info port-sets
.
set thread pause
set
task pause off
(see above), this command comes in handy to suspend
only the current thread.
show thread pause
set thread run
show thread run
set thread detach-suspend-count
set thread
takeover-suspend-count
to force it to an absolute value.
show thread detach-suspend-count
set thread exception-port
set thread excp
set task exception-port
(see above).
set thread excp
is the shorthand alias.
set thread takeover-suspend-count
set thread default
show thread default
set thread
commands has a set thread
default
counterpart (e.g., set thread default pause
, set
thread default exception-port
, etc.). The thread default
variety of commands sets the default thread properties for all
threads; you can then change the properties of individual threads with
the non-default commands.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GDB provides the following commands specific to the QNX Neutrino target:
set debug nto-debug
show debug nto-debug
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This section describes configurations involving the debugging of embedded operating systems that are available for several different architectures.
18.2.1 Using GDB with VxWorks
GDB includes the ability to debug programs running on various real-time operating systems.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
target vxworks machinename
On VxWorks, load
links filename dynamically on the
current target system as well as adding its symbols in GDB.
GDB enables developers to spawn and debug tasks running on networked
VxWorks targets from a Unix host. Already-running tasks spawned from
the VxWorks shell can also be debugged. GDB uses code that runs on
both the Unix host and on the VxWorks target. The program
gdb
is installed and executed on the Unix host. (It may be
installed with the name vxgdb
, to distinguish it from a
GDB for debugging programs on the host itself.)
VxWorks-timeout args
vxworks-timeout
.
This option is set by the user, and args represents the number of
seconds GDB waits for responses to rpc's. You might use this if
your VxWorks target is a slow software simulator or is on the far side
of a thin network line.
The following information on connecting to VxWorks was current when this manual was produced; newer releases of VxWorks may use revised procedures.
To use GDB with VxWorks, you must rebuild your VxWorks kernel
to include the remote debugging interface routines in the VxWorks
library `rdb.a'. To do this, define INCLUDE_RDB
in the
VxWorks configuration file `configAll.h' and rebuild your VxWorks
kernel. The resulting kernel contains `rdb.a', and spawns the
source debugging task tRdbTask
when VxWorks is booted. For more
information on configuring and remaking VxWorks, see the manufacturer's
manual.
Once you have included `rdb.a' in your VxWorks system image and set
your Unix execution search path to find GDB, you are ready to
run GDB. From your Unix host, run gdb
(or
vxgdb
, depending on your installation).
GDB comes up showing the prompt:
(vxgdb) |
18.2.1.1 Connecting to VxWorks 18.2.1.2 VxWorks Download VxWorks download 18.2.1.3 Running Tasks Running tasks
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The GDB command target
lets you connect to a VxWorks target on the
network. To connect to a target whose host name is "tt
", type:
(vxgdb) target vxworks tt |
GDB displays messages like these:
Attaching remote machine across net... Connected to tt. |
GDB then attempts to read the symbol tables of any object modules loaded into the VxWorks target since it was last booted. GDB locates these files by searching the directories listed in the command search path (see section Your Program's Environment); if it fails to find an object file, it displays a message such as:
prog.o: No such file or directory. |
When this happens, add the appropriate directory to the search path with
the GDB command path
, and execute the target
command again.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
If you have connected to the VxWorks target and you want to debug an
object that has not yet been loaded, you can use the GDB
load
command to download a file from Unix to VxWorks
incrementally. The object file given as an argument to the load
command is actually opened twice: first by the VxWorks target in order
to download the code, then by GDB in order to read the symbol
table. This can lead to problems if the current working directories on
the two systems differ. If both systems have NFS mounted the same
filesystems, you can avoid these problems by using absolute paths.
Otherwise, it is simplest to set the working directory on both systems
to the directory in which the object file resides, and then to reference
the file by its name, without any path. For instance, a program
`prog.o' may reside in `vxpath/vw/demo/rdb' in VxWorks
and in `hostpath/vw/demo/rdb' on the host. To load this
program, type this on VxWorks:
-> cd "vxpath/vw/demo/rdb" |
Then, in GDB, type:
(vxgdb) cd hostpath/vw/demo/rdb (vxgdb) load prog.o |
GDB displays a response similar to this:
Reading symbol data from wherever/vw/demo/rdb/prog.o... done. |
You can also use the load
command to reload an object module
after editing and recompiling the corresponding source file. Note that
this makes GDB delete all currently-defined breakpoints,
auto-displays, and convenience variables, and to clear the value
history. (This is necessary in order to preserve the integrity of
debugger's data structures that reference the target system's symbol
table.)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
You can also attach to an existing task using the attach
command as
follows:
(vxgdb) attach task |
where task is the VxWorks hexadecimal task ID. The task can be running or suspended when you attach to it. Running tasks are suspended at the time of attachment.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This section goes into details specific to particular embedded configurations.
Whenever a specific embedded processor has a simulator, GDB allows to send an arbitrary command to the simulator.
sim command
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
target rdi dev
target rdp dev
GDB provides the following ARM-specific commands:
set arm disassembler
"std"
style is the standard style.
show arm disassembler
set arm apcs32
show arm apcs32
set arm fpu fputype
auto
softfpa
fpa
softvfp
vfp
show arm fpu
set arm abi
show arm abi
set debug arm
show debug arm
The following commands are available when an ARM target is debugged using the RDI interface:
rdilogfile [file]
rdilogenable [arg]
"yes"
enables logging, with an argument 0 or "no"
disables it. With
no arguments displays the current setting. When logging is enabled,
ADP packets exchanged between GDB and the RDI target device
are logged to a file.
set rdiromatzero
target rdi
command.
show rdiromatzero
set rdiheartbeat
show rdiheartbeat
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
target m32r dev
target m32rsdi dev
The following GDB commands are specific to the M32R monitor:
set download-path path
show download-path
set board-address addr
show board-address
set server-address addr
show server-address
upload [file]
tload [file]
upload
command.
The following commands are available for M32R/SDI:
sdireset
sdistatus
debug_chaos
use_debug_dma
use_mon_code
use_ib_break
use_dbt_break
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The Motorola m68k configuration includes ColdFire support, and a target command for the following ROM monitor.
target dbug dev
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GDB can use the MIPS remote debugging protocol to talk to a MIPS board attached to a serial line. This is available when you configure GDB with `--target=mips-idt-ecoff'.
Use these GDB commands to specify the connection to your target board:
target mips port
gdb
with the
name of your program as the argument. To connect to the board, use the
command `target mips port', where port is the name of
the serial port connected to the board. If the program has not already
been downloaded to the board, you may use the load
command to
download it. You can then use all the usual GDB commands.
For example, this sequence connects to the target board through a serial port, and loads and runs a program called prog through the debugger:
host$ gdb prog GDB is free software and ... (gdb) target mips /dev/ttyb (gdb) load prog (gdb) run |
target mips hostname:portnumber
target pmon port
target ddb port
target lsi port
target r3900 dev
target array dev
GDB also supports these special commands for MIPS targets:
set mipsfpu double
set mipsfpu single
set mipsfpu none
set mipsfpu auto
show mipsfpu
In previous versions the only choices were double precision or no floating point, so `set mipsfpu on' will select double precision and `set mipsfpu off' will select no floating point.
As usual, you can inquire about the mipsfpu
variable with
`show mipsfpu'.
set timeout seconds
set retransmit-timeout seconds
show timeout
show retransmit-timeout
set timeout seconds
command. The
default is 5 seconds. Similarly, you can control the timeout used while
waiting for an acknowledgement of a packet with the set
retransmit-timeout seconds
command. The default is 3 seconds.
You can inspect both values with show timeout
and show
retransmit-timeout
. (These commands are only available when
GDB is configured for `--target=mips-idt-ecoff'.)
The timeout set by set timeout
does not apply when GDB
is waiting for your program to stop. In that case, GDB waits
forever because it has no way of knowing how long the program is going
to run before stopping.
set syn-garbage-limit num
show syn-garbage-limit
set monitor-prompt prompt
show monitor-prompt
set monitor-warnings
lsi
target. When on, GDB will
display warning messages whose codes are returned by the lsi
PMON monitor for breakpoint commands.
show monitor-warnings
pmon command
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
See OR1k Architecture document (www.opencores.org) for more information about platform and commands.
target jtag jtag://host:port
Connects to remote JTAG server. JTAG remote server can be either an or1ksim or JTAG server, connected via parallel port to the board.
Example: target jtag jtag://localhost:9999
or1ksim command
or1ksim
OpenRISC 1000 Architectural
Simulator, proprietary commands can be executed.
info or1k spr
info or1k spr group
info or1k spr groupno
info or1k spr group register
info or1k spr register
info or1k spr groupno registerno
info or1k spr registerno
spr group register value
spr register value
spr groupno registerno value
spr registerno value
Some implementations of OpenRISC 1000 Architecture also have hardware trace. It is very similar to GDB trace, except it does not interfere with normal program execution and is thus much faster. Hardware breakpoints/watchpoint triggers can be set using:
$LEA/$LDATA
$SEA/$SDATA
$AEA/$ADATA
$FETCH
When triggered, it can capture low level data, like: PC
, LSEA
,
LDATA
, SDATA
, READSPR
, WRITESPR
, INSTR
.
hwatch conditional
hwatch ($LEA == my_var) && ($LDATA < 50) || ($SEA == my_var) && ($SDATA >= 50)
hwatch ($LEA == my_var) && ($LDATA < 50) || ($SEA == my_var) && ($SDATA >= 50)
htrace info
htrace trigger conditional
htrace qualifier conditional
htrace stop conditional
htrace record [data]*
htrace enable
htrace disable
htrace rewind [filename]
If filename is specified, new trace file is made and any newly collected data will be written there.
htrace print [start [len]]
htrace mode continuous
htrace mode suspend
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GDB provides the following PowerPC-specific commands:
set powerpc soft-float
show powerpc soft-float
set powerpc vector-abi
show powerpc vector-abi
target dink32 dev
target ppcbug dev
target ppcbug1 dev
target sds dev
The following commands specific to the SDS protocol are supported by GDB:
set sdstimeout nsec
show sdstimeout
sds command
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
target op50n dev
target w89k dev
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
GDB enables developers to debug tasks running on
Sparclet targets from a Unix host.
GDB uses code that runs on
both the Unix host and on the Sparclet target. The program
gdb
is installed and executed on the Unix host.
remotetimeout args
remotetimeout
.
This option is set by the user, and args represents the number of
seconds GDB waits for responses.
When compiling for debugging, include the options `-g' to get debug information and `-Ttext' to relocate the program to where you wish to load it on the target. You may also want to add the options `-n' or `-N' in order to reduce the size of the sections. Example:
sparclet-aout-gcc prog.c -Ttext 0x12010000 -g -o prog -N |
You can use objdump
to verify that the addresses are what you intended:
sparclet-aout-objdump --headers --syms prog |
Once you have set
your Unix execution search path to find GDB, you are ready to
run GDB. From your Unix host, run gdb
(or sparclet-aout-gdb
, depending on your installation).
GDB comes up showing the prompt:
(gdbslet) |
18.3.8.1 Setting File to Debug Setting the file to debug 18.3.8.2 Connecting to Sparclet 18.3.8.3 Sparclet Download Sparclet download 18.3.8.4 Running and Debugging Running and debugging
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The GDB command file
lets you choose with program to debug.
(gdbslet) file prog |
GDB then attempts to read the symbol table of `prog'. GDB locates the file by searching the directories listed in the command search path. If the file was compiled with debug information (option `-g'), source files will be searched as well. GDB locates the source files by searching the directories listed in the directory search path (see section Your Program's Environment). If it fails to find a file, it displays a message such as:
prog: No such file or directory. |
When this happens, add the appropriate directories to the search paths with
the GDB commands path
and dir
, and execute the
target
command again.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The GDB command target
lets you connect to a Sparclet target.
To connect to a target on serial port "ttya
", type:
(gdbslet) target sparclet /dev/ttya Remote target sparclet connected to /dev/ttya main () at ../prog.c:3 |
GDB displays messages like these:
Connected to ttya. |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Once connected to the Sparclet target,
you can use the GDB
load
command to download the file from the host to the target.
The file name and load offset should be given as arguments to the load
command.
Since the file format is aout, the program must be loaded to the starting
address. You can use objdump
to find out what this value is. The load
offset is an offset which is added to the VMA (virtual memory address)
of each of the file's sections.
For instance, if the program
`prog' was linked to text address 0x1201000, with data at 0x12010160
and bss at 0x12010170, in GDB, type:
(gdbslet) load prog 0x12010000 Loading section .text, size 0xdb0 vma 0x12010000 |
If the code is loaded at a different address then what the program was linked
to, you may need to use the section
and add-symbol-file
commands
to tell GDB where to map the symbol table.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
You can now begin debugging the task using GDB's execution control
commands, b
, step
, run
, etc. See the GDB
manual for the list of commands.
(gdbslet) b main Breakpoint 1 at 0x12010000: file prog.c, line 3. (gdbslet) run Starting program: prog Breakpoint 1, main (argc=1, argv=0xeffff21c) at prog.c:3 3 char *symarg = 0; (gdbslet) step 4 char *execarg = "hello!"; (gdbslet) |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
target sparclite dev
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
When configured for debugging Zilog Z8000 targets, GDB includes a Z8000 simulator.
For the Z8000 family, `target sim' simulates either the Z8002 (the unsegmented variant of the Z8000 architecture) or the Z8001 (the segmented variant). The simulator recognizes which architecture is appropriate by inspecting the object code.
target sim args
After specifying this target, you can debug programs for the simulated
CPU in the same style as programs for your host computer; use the
file
command to load a new program image, the run
command
to run your program, and so on.
As well as making available all the usual machine registers (see section Registers), the Z8000 simulator provides three additional items of information as specially named registers:
cycles
insts
time
You can refer to these values in GDB expressions with the usual conventions; for example, `b fputc if $cycles>5000' sets a conditional breakpoint that suspends only after at least 5000 simulated clock ticks.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
When configured for debugging the Atmel AVR, GDB supports the following AVR-specific commands:
info io_registers
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
When configured for debugging CRIS, GDB provides the following CRIS-specific commands:
set cris-version ver
show cris-version
set cris-dwarf2-cfi
gcc-cris
whose version is below
R59
.
show cris-dwarf2-cfi
set cris-mode mode
show cris-mode
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
For the Renesas Super-H processor, GDB provides these commands:
regs
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This section describes characteristics of architectures that affect all uses of GDB with the architecture, both native and cross.
18.4.1 x86 Architecture-specific Issues 18.4.2 A29K 18.4.3 Alpha 18.4.4 MIPS 18.4.5 HPPA HP PA architecture 18.4.6 Cell Broadband Engine SPU architecture 18.4.7 PowerPC
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
set struct-convention mode
struct
s and
union
s from functions to mode. Possible values of
mode are "pcc"
, "reg"
, and "default"
(the
default). "default"
or "pcc"
means that struct
s
are returned on the stack, while "reg"
means that a
struct
or a union
whose size is 1, 2, 4, or 8 bytes will
be returned in a register.
show struct-convention
struct
s
from functions.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
set rstack_high_address address
set rstack_high_address
command. The argument should be an
address, which you probably want to precede with `0x' to specify in
hexadecimal.
show rstack_high_address
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
See the following section.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Alpha- and MIPS-based computers use an unusual stack frame, which sometimes requires GDB to search backward in the object code to find the beginning of a function.
To improve response time (especially for embedded applications, where GDB may be restricted to a slow serial line for this search) you may want to limit the size of this search, using one of these commands:
set heuristic-fence-post limit
heuristic-fence-post
must search
and therefore the longer it takes to run. You should only need to use
this command when debugging a stripped executable.
show heuristic-fence-post
These commands are available only when GDB is configured for debugging programs on Alpha or MIPS processors.
Several MIPS-specific commands are available when debugging MIPS programs:
set mips abi arg
show mips abi
set mipsfpu
show mipsfpu
set mips mask-address arg
show mips mask-address
set remote-mips64-transfers-32bit-regs
show remote-mips64-transfers-32bit-regs
set debug mips
show debug mips
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
When GDB is debugging the HP PA architecture, it provides the following special commands:
set debug hppa
show debug hppa
maint print unwind address
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
When GDB is debugging the Cell Broadband Engine SPU architecture, it provides the following special commands:
info spu event
info spu signal
info spu mailbox
info spu dma
info spu proxydma
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
When GDB is debugging the PowerPC architecture, it provides a set of
pseudo-registers to enable inspection of 128-bit wide Decimal Floating Point
numbers stored in the floating point registers. These values must be stored
in two consecutive registers, always starting at an even register like
f0
or f2
.
The pseudo-registers go from $dl0
through $dl15
, and are formed
by joining the even/odd register pairs f0
and f1
for $dl0
,
f2
and f3
for $dl1
and so on.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Please send FSF & GNU inquiries & questions to gnu@gnu.org. There are also other ways to contact the FSF.
These pages are maintained by the GDB developers.
Copyright Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.
This document was generated by GDB Administrator on March, 27 2008 using texi2html