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