Remote debugging the kernel¶
FreeBSD supports remote debugging using a serial interface. Since most virtual solutions support serial interfaces it can be quite convenient to deploy a kernel and start a debug session on another machine.
The setup assumes two (virtual) machines with a serial (rs232) connection in between.
Configure and build a kernel¶
Use our toolchain described in detail here and add the following options
SMP file in
options GDB # Support remote GDB.
Next clean and build a kernel
make clean-obj,kernel kernel
Install the kernel on test vm¶
With the build finished, we should have a kernel package on the build machine available at the following location:
Copy this package to the test vm and install it using our
opnsense-update -ikfr [version] -l /location/from/
Where [version] is the version part of the kernel package, such as
Configure the test vm¶
To be able to connect to the test machine using
kgdb, you need to make sure some settings are set.
/boot/device.hints and change or add
hint.uart.0.flags to the following:
Also /boot/loader.conf.local should have a baud-rate configured for the serial device:
Test your setup¶
Login to the test machine and force a debug session in gdb, using the following commands:
# sysctl debug.kdb.current=gdb
# sysctl debug.kdb.enter=1
Step to enter the remote GDB backend.
db> c (continue)
Then go to the build machine, make sure gdb is installed (
pkg install gdb) and go to the directory where
the debug symbols are and start a session, ask a backtrace
bt and continue normal operation