我想知道在调试远程内核时是否确实有办法在 gdb 和 ddb 之间切换。
我已经在 gdb(或者更确切地说是 kgdb)提示符下。从这里如何切换到被调试机器上的本地 ddb?
我的内核配置文件已经包含options BREAK_TO_DEBUGGER
,并且我同时配置了 GDB 和 DDB:
options GDB
options DDB
根据开发人员手册,“每次键入 gdb 时,都会在远程 GDB 和本地 DDB 之间切换模式。为了立即强制执行下一个陷阱,只需键入 s(步骤)。您的托管 GDB 现在将获得对目标内核:”
所以,我确实尝试在 gdb 提示符下输入“gdb”(有趣的是:D),正如预期的那样,这是一个无法识别的命令。显然,这个命令应该在 ddb 提示符下输入。但我的问题是,如何从正在运行的机器中掉线到 ddb,其串行端口(尽管是虚拟的)远程连接到另一台机器的 KGDB?当远程 GDB 正在侦听并且我使用 强制恐慌sysctl debug.kdb.enter=1
时,它确实会进入远程 KGDB。但是,当它不听时,系统就会冻结。
我想要的是在本地机器上输入 ddb 。使用它进行一些调试;对于最好使用 KGDB 完成的事情,请转到远程 KGDB,然后在我完成后切换回本地 DDB。
有没有办法做到这一点?