ctrl+C obviously unusable!
true way:
echo g > /proc/sysrq-trigger
from :
https://www.kernel.org/doc/htmldocs/kgdb/EnableKGDB.html
total record:
In order to use kgdb you must activate it by passing configuration information to one of the kgdb I/O drivers. If you do not pass any configuration information kgdb will not do anything at all. Kgdb will only actively hook up to the kernel trap hooks if a kgdb I/O driver is loaded and configured. If you unconfigure a kgdb I/O driver, kgdb will unregister all the kernel hook points.
All kgdb I/O drivers can be reconfigured at run time, if
CONFIG_SYSFS and CONFIG_MODULES are enabled, by echo'ing a new config string to
/sys/module/<driver>/parameter/<option>
. The driver can be unconfigured by passing an empty string. You cannot change the configuration while the debugger is attached. Make sure to detach the debugger with the
detach
command prior to trying to unconfigure a kgdb I/O driver.
-
Configure kgdboc
Boot kernel with arguments:
-
kgdboc=ttyS0,115200
OR
Configure kgdboc after the kernel booted:
-
echo ttyS0 > /sys/module/kgdboc/parameters/kgdboc
-
-
Stop kernel execution (break into the debugger)
In order to connect to gdb via kgdboc, the kernel must first be stopped. There are several ways to stop the kernel which include using kgdbwait as a boot argument, via a sysrq-g, or running the kernel until it takes an exception where it waits for the debugger to attach.
-
When logged in as root or with a super user session you can run:
echo g > /proc/sysrq-trigger
-
Example using minicom 2.2
Press:
Control-a
Press:
f
Press:
g
-
When you have telneted to a terminal server that supports sending a remote break
Press:
Control-]
Type in:
send break
Press:
Enter
Press:
g
-
-
Connect from from gdb
Example (using a directly connected port):
% gdb ./vmlinux (gdb) set remotebaud 115200 (gdb) target remote /dev/ttyS0
Example (kgdb to a terminal server on TCP port 2012):
% gdb ./vmlinux (gdb) target remote 192.168.2.2:2012
Once connected, you can debug a kernel the way you would debug an application program.
If you are having problems connecting or something is going seriously wrong while debugging, it will most often be the case that you want to enable gdb to be verbose about its target communications. You do this prior to issuing the
target remote
command by typing in:set debug remote 1
Remember if you continue in gdb, and need to "break in" again, you need to issue an other sysrq-g. It is easy to create a simple entry point by putting a breakpoint at
sys_sync
and then you can run "sync" from a shell or script to break into the debugger.