xref: /freebsd/tools/debugscripts/dot.gdbinit (revision 74bf4e164ba5851606a27d4feff27717452583e5)
1# $FreeBSD$
2# .gdbinit file for remote serial debugging.
3# see gdbinit(9) for further details.
4#
5# XXX Do not use this file directly.  It contains parameters which are
6# XXX substituted by the kernel Makefile when you do a 'make gdbinit'.
7# XXX This also removes lines starting with '# XXX'.
8# XXX
9# To debug kernels, do:
10#
11#  cd /usr/src/sys/GENERIC   (or kernel build directory)
12#  make gdbinit
13#  gdb -k kernel.debug
14#
15# Read gdb(4) for more details.
16
17# The following lines (down to "***** End" comment) may need to be changed
18
19# Bit rate for serial link.  Due to problems in the interface,
20# this may not work well above 9600 bps.
21set remotebaud 9600
22
23set output-radix 16
24set height 70
25set width 120
26set remotetimeout 1
27set complaints 1
28set print pretty
29dir ../../..
30
31# ***** End of things you're likely to need to change.
32
33# Connect to remote target via a serial port.
34define tr
35# Remote debugging port
36target remote $arg0
37end
38
39document tr
40Debug a remote system via serial or firewire interface.  For example, specify 'tr /dev/cuaa0' to use first serial port, or 'tr localhost:5556' for default firewire port.  See also tr0, tr1 and trf commands.
41end
42
43# Convenience functions.  These call tr.
44# debug via cuaa0
45define tr0
46tr /dev/cuaa0
47end
48define tr1
49tr /dev/cuaa1
50end
51# Firewire
52define trf
53tr localhost:5556
54end
55
56document tr0
57Debug a remote system via serial interface /dev/cuaa0.  See also tr, tr1 and trf commands.
58end
59document tr1
60Debug a remote system via serial interface /dev/cuaa1.  See also tr, tr0 and trf commands.
61end
62document trf
63Debug a remote system via firewire interface at default port 5556.  See also tr, tr0 and tr1 commands.
64end
65
66# Get symbols from klds.  Unfortunately, there are a number of
67# landmines involved here:
68#
69# When debugging the same machine (via /dev/mem), we can get the
70# script to call kldstat and pass the info on to asf(8).  This won't
71# work for crashes or remote debugging, of course, because we'd get
72# the information for the wrong system.  Instead, we use the macro
73# "kldstat", which extracts the information from the "dump".  The
74# trouble here is that it's a pain to use, since gdb doesn't have the
75# capability to pass data to scripts, so we have to mark it and paste
76# it into the script.  This makes it silly to use this method for
77# debugging the local system.  Instead, we have two scripts:
78#
79# getsyms uses the information in the "dump", and you have to paste it.
80# kldsyms uses the local kld information.
81#
82# Improvements in gdb should make this go away some day.
83#
84define kldsyms
85# This will be replaced by the path of the real modules directory.
86shell asf -f -k MODPATH
87source .asf
88end
89document kldsyms
90Read in the symbol tables for the debugging machine.  This only makes sense when debugging /dev/mem; use the 'getsyms' macro for remote debugging.
91end
92
93# Remote system
94define getsyms
95kldstat
96echo Select the list above with the mouse, paste into the screen\n
97echo and then press ^D.  Yes, this is annoying.\n
98# This will be replaced by the path of the real modules directory.
99shell asf -f MODPATH
100source .asf
101end
102
103document getsyms
104Display kldstat information for the target machine and invite user to paste it back in.  This causes the symbols for the KLDs to be loaded.  When doing memory debugging, use the command kldsyms instead.
105end
106
107source gdbinit.kernel
108source gdbinit.vinum
109source gdbinit.machine
110
111echo Ready to go.  Enter 'tr' to connect to the remote target\n
112echo with /dev/cuaa0, 'tr /dev/cuaa1' to connect to a different port\n
113echo or 'trf portno' to connect to the remote target with the firewire\n
114echo interface.  portno defaults to 5556.\n
115echo \n
116echo Type 'getsyms' after connection to load kld symbols.\n
117echo \n
118echo If you're debugging a local system, you can use 'kldsyms' instead\n
119echo to load the kld symbols.  That's a less obnoxious interface.\n
120