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.
This section describes details specific to particular native configurations.
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.
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
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
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
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
This comes in handy when you want to see whether a pointer is outside the data segment's limit (i.e. garbled).(gdb) info dos ldt $ds
0x13f: base=0x11970000 limit=0x0009ffff 32-Bit Data (Read/Write, Exp-up)
info dos pde
info dos pte
info dos address-pte addr
i
is stored:
This says that(gdb) info dos address-pte __djgpp_base_address + (char *)&i
Page Table entry for address 0x11a00d30:
Base=0x02698000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0xd30
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(gdb) info dos address-pte *((unsigned *)&_go32_info_block + 3)
Page Table entry for address 0x29110:
Base=0x00029000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0x110
+ 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
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 subsection. The subsubsection see section Support for DLLs without debugging symbols describes working with DLLs that have no 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 the six segment registers.
info dll
dll-symbols
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
set debugexec
set debugexceptions
set debugmemory
set shell
show shell
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 subsubsection 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 see section Commands to specify files or the
dll-symbols
command in see section 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.
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
see section 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...]
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.
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.
GDB provides the following commands specific to the QNX Neutrino target:
set debug nto-debug
show debug nto-debug
This section describes configurations involving the debugging of embedded operating systems that are available for several different architectures.
GDB includes the ability to debug programs running on various real-time operating systems.
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)
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.
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.)
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.
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
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
target hms dev
device
and speed
to control the serial
line and the communications speed used.
target e7000 dev
target sh3 dev
target sh3e dev
When you select remote debugging to a Renesas SH, H8/300, or H8/500
board, the load
command downloads your program to the Renesas
board and also opens it as the current executable target for
GDB on your host (like the file
command).
GDB needs to know these things to talk to your Renesas SH, H8/300, or H8/500:
Use the special GDB
command `device port' if you
need to explicitly set the serial device. The default port is the
first available port on your host. This is only necessary on Unix
hosts, where it is typically something like `/dev/ttya'.
GDB
has another special command to set the communications
speed: `speed bps'. This command also is only used from Unix
hosts; on DOS hosts, set the line speed as usual from outside GDB with
the DOS mode
command (for instance,
mode com2:9600,n,8,1,p for a 9600bps connection).
The `device' and `speed' commands are available only when you
use a Unix host to debug your Renesas microprocessor programs. If you
use a DOS host,
GDB depends on an auxiliary terminate-and-stay-resident program
called asynctsr
to communicate with the development board
through a PC serial port. You must also use the DOS mode
command
to set up the serial port on the DOS side.
The following sample session illustrates the steps needed to start a program under GDB control on an H8/300. The example uses a sample H8/300 program called `t.x'. The procedure is the same for the Renesas SH and the H8/500.
First hook up your development board. In this example, we use a
board attached to serial port COM2
; if you use a different serial
port, substitute its name in the argument of the mode
command.
When you call asynctsr
, the auxiliary comms program used by the
debugger, you give it just the numeric part of the serial port's name;
for example, `asyncstr 2' below runs asyncstr
on
COM2
.
C:\H8300\TEST> asynctsr 2 C:\H8300\TEST> mode com2:9600,n,8,1,p Resident portion of MODE loaded COM2: 9600, n, 8, 1, p
Warning: We have noticed a bug in PC-NFS that conflicts with
asynctsr
. If you also run PC-NFS on your DOS host, you may need to disable it, or even boot without it, to useasynctsr
to control your development board.
Now that serial communications are set up, and the development board is
connected, you can start up GDB. Call GDB
with
the name of your program as the argument. GDB
prompts
you, as usual, with the prompt `(gdb)'. Use two special
commands to begin your debugging session: `target hms' to specify
cross-debugging to the Renesas board, and the load
command to
download your program to the board. load
displays the names of
the program's sections, and a `*' for each 2K of data downloaded.
(If you want to refresh GDB data on symbols or on the
executable file without downloading, use the GDB commands
file
or symbol-file
. These commands, and load
itself, are described in section Commands to specify files.)
(eg-C:\H8300\TEST) gdb t.x GDB is free software and you are welcome to distribute copies of it under certain conditions; type "show copying" to see the conditions. There is absolutely no warranty for GDB; type "show warranty" for details. GDB 6.3.50.20050815-cvs, Copyright 1992 Free Software Foundation, Inc... (gdb) target hms Connected to remote H8/300 HMS system. (gdb) load t.x .text : 0x8000 .. 0xabde *********** .data : 0xabde .. 0xad30 * .stack : 0xf000 .. 0xf014 *
At this point, you're ready to run or debug your program. From here on,
you can use all the usual GDB commands. The break
command
sets breakpoints; the run
command starts your program;
print
or x
display data; the continue
command
resumes execution after stopping at a breakpoint. You can use the
help
command at any time to find out more about GDB commands.
Remember, however, that operating system facilities aren't available on your development board; for example, if your program hangs, you can't send an interrupt--but you can press the RESET switch!
Use the RESET button on the development board
In either case, GDB sees the effect of a RESET on the development board as a "normal exit" of your program.
You can use the E7000 in-circuit emulator to develop code for either the Renesas SH or the H8/300H. Use one of these forms of the `target e7000' command to connect GDB to your E7000:
target e7000 port speed
target e7000 hostname
telnet
to connect.
The following special commands are available when debugging with the Renesas E7000 ICE:
e7000 command
ftplogin machine username password dir
ftpload file
ftplogin
to fetch and
load the named file from the E7000 monitor.
drain
set usehardbreakpoints
show usehardbreakpoints
Some GDB commands are available only for the H8/300:
set machine h8300
set machine h8300h
set memory mod
show memory
small
,
big
, medium
, and compact
.
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
The Motorola m68k configuration includes ColdFire support, and target command for the following ROM monitors.
target abug dev
target cpu32bug dev
target dbug dev
target est dev
target rom68k dev
target rombug dev
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
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
See OR1k Architecture document (@uref{www.opencores.org}) for more information about platform and commands.
target jtag jtag://host:port
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]
htrace print [start [len]]
htrace mode continuous
htrace mode suspend
target dink32 dev
target ppcbug dev
target ppcbug1 dev
target sds dev
The following commands specifi to the SDS protocol are supported byGDB:
set sdstimeout nsec
show sdstimeout
sds command
target op50n dev
target w89k dev
target hms dev
device
and speed
to control the serial line and
the communications speed used.
target e7000 dev
target sh3 dev
target sh3e dev
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)
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.
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.
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.
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)
target sparclite dev
GDB may be used with a Tandem ST2000 phone switch, running Tandem's STDBUG protocol.
To connect your ST2000 to the host system, see the manufacturer's manual. Once the ST2000 is physically attached, you can run:
target st2000 dev speed
to establish it as your debugging environment. dev is normally
the name of a serial device, such as `/dev/ttya', connected to the
ST2000 via a serial line. You can instead specify dev as a TCP
connection (for example, to a serial line attached via a terminal
concentrator) using the syntax hostname:portnumber
.
The load
and attach
commands are not defined for
this target; you must load your program into the ST2000 as you normally
would for standalone operation. GDB reads debugging information
(such as symbols) from a separate, debugging version of the program
available on your host computer.
These auxiliary GDB commands are available to help you with the ST2000 environment:
st2000 command
connect
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.
When configured for debugging the Atmel AVR, GDB supports the following AVR-specific commands:
info io_registers
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
For the Renesas Super-H processor, GDB provides these commands:
regs
The following commands are available for Windows CE:
set remotedirectory dir
show remotedirectory
set remoteupload method
show remoteupload
set remoteaddhost
show remoteaddhost
This section describes characteristics of architectures that affect all uses of GDB with the architecture, both native and cross.
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.
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
See the following section.
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 saved-gpreg-size size
show mips saved-gpreg-size
set mips stack-arg-size size
"32"
, "64"
or "auto"
(the default).
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
When GDB is debugging te HP PA architecture, it provides the following special commands:
set debug hppa
show debug hppa
maint print unwind address
Go to the first, previous, next, last section, table of contents.