Aijaz Baig
2016-Apr-19 16:35 UTC
Toggling between remote KGDB and local DDB within a debugging session
On Tue, Apr 19, 2016 at 9:08 PM, Conrad Meyer <cem at freebsd.org> wrote:> On Tue, Apr 19, 2016 at 5:49 AM, Aijaz Baig <aijazbaig1 at gmail.com> wrote: >> I would like to know if there is indeed a way to toggle between gdb >> and ddb while debugging a remote kernel. I am already at the gdb (or >> rather kgdb) prompt. From here how do I switch to local ddb on the >> debugged machine?? > > Ctrl-c on the serial console.For me I merely see 'Quit' being spat out when I do a ctrl-c> >> When remote remote KGDB is listening and I force a >> panic using 'sysctl debug.kdb.enter=1', it drops into remote KGDB. >> However, when it is NOT listening on the serial port, the local system >> just freezes > > Are you sure ddb just doesn't run on the serial port?For the very first time, a manual panic does indeed bring up the ddb prompt. However it is only AFTER I've attached kgdb to it, does this start happening, namely not going back ever to ddb (with 'Quit' being displayed instead and with the control still with KGDB)> >> What I want, is to enter ddb on the local machine. Do some debugging >> using it; drop to remote KGDB for things that are best done using >> KGDB, then switch back to local DDB when I'm done. > > Yes. I regularly do this with ctrl-c (gdb->ddb) / "gdb" (ddb->gdb).If it'd help, I'm using VMs. So my serial console is actually the VM console. Now just to be on the safe side I tried putting "comconsole" into '/boot/loader.conf'. However now, with the aforementioned sysctl, it doesn't drop to ddb even for the very first time unlike previous trials where. dropping into DDB was smooth as long as KGDB was not attached to it ever.> > Best, > ConradKeen to hear from you -- Best Regards, Aijaz Baig
Conrad Meyer
2016-Apr-19 16:47 UTC
Toggling between remote KGDB and local DDB within a debugging session
On Tue, Apr 19, 2016 at 9:35 AM, Aijaz Baig <aijazbaig1 at gmail.com> wrote:> On Tue, Apr 19, 2016 at 9:08 PM, Conrad Meyer <cem at freebsd.org> wrote: >> On Tue, Apr 19, 2016 at 5:49 AM, Aijaz Baig <aijazbaig1 at gmail.com> wrote: >>> I would like to know if there is indeed a way to toggle between gdb >>> and ddb while debugging a remote kernel. I am already at the gdb (or >>> rather kgdb) prompt. From here how do I switch to local ddb on the >>> debugged machine?? >> >> Ctrl-c on the serial console. > For me I merely see 'Quit' being spat out when I do a ctrl-cCtrl-C on the serial console, not in GDB. It looks like this: # sysctl debug.kdb.enter=1 debug.kdb.enter:KDB: enter: sysctl debug.kdb.enter [ thread pid 21907 tid 102340 ] Stopped at kdb_sysctl_enter+0x87: movq $0,kdb_why db> gdb (ctrl-c will return control to ddb) Switching to gdb back-end Received ^C; trying to switch back to ddb. using longjmp, hope it works! KDB: reentering KDB: stack backtrace: db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffea79d0e6140 kdb_backtrace() at kdb_backtrace+0x39/frame 0xfffffea79d0e61f0 kdb_reenter() at kdb_reenter+0x33/frame 0xfffffea79d0e6200 gdb_tx_end() at gdb_tx_end+0x28a/frame 0xfffffea79d0e6240 gdb_trap() at gdb_trap+0x1f9/frame 0xfffffea79d0e6390 kdb_trap() at kdb_trap+0x169/frame 0xfffffea79d0e63f0 trap() at trap+0x71d/frame 0xfffffea79d0e6600 calltrap() at calltrap+0x8/frame 0xfffffea79d0e6600 --- trap 0x3, rip = 0xffffffff8058f177, rsp = 0xfffffea79d0e66c0, rbp = 0xfffffea79d0e66f0 --- kdb_sysctl_enter() at kdb_sysctl_enter+0x87/frame 0xfffffea79d0e66f0 sysctl_root() at sysctl_root+0x24a/frame 0xfffffea79d0e6740 userland_sysctl() at userland_sysctl+0x1d2/frame 0xfffffea79d0e67f0 sys___sysctl() at sys___sysctl+0x74/frame 0xfffffea79d0e68a0 amd64_syscall() at amd64_syscall+0x397/frame 0xfffffea79d0e6ab0 Xfast_syscall() at Xfast_syscall+0xfb/frame 0xfffffea79d0e6ab0 --- syscall (202, FreeBSD ELF64, sys___sysctl), rip = 0x80095ed4a, rsp = 0x7fffffffc948, rbp = 0x7fffffffc980 --- gdb_trap bailing, hopefully back to ddb! Switching to ddb back-end [ thread pid 21907 tid 102340 ] Stopped at kdb_sysctl_enter+0x87: movq $0,kdb_why db> c 0 -> 0 Best, Conrad