在调试会话中在远程KGDB和本地DDB之间切换

时间:2016-04-19 05:55:14

标签: debugging remote-debugging freebsd kgdb

我认为标题说明了一切! :)

我想知道在调试远程内核时是否确实有办法在gdb和ddb之间切换。

我已经在gdb(或更确切地说是kgdb)提示符下。从这里如何在调试的机器上切换到本地ddb?

我的内核配置文件已包含options BREAK_TO_DEBUGGER,我同时配置了GDB和DDB: options GDB options DDB

根据developer's handbook,“每次键入gdb时,模式都将在远程GDB和本地DDB之间切换。为了立即强制下一个陷阱,只需键入s(步骤)。您的托管GDB现在将控制目标内核:“

所以,我确实尝试在gdb提示符下输入'gdb'(有趣的是我:D),正如预期的那样,这是一个无法识别的命令。显然,这个命令应该在ddb提示符下输入。但我的问题是,如何从一个正在运行的机器中删除ddb,其串口(虽然是虚拟的)远程连接到另一台机器的KGDB?当远程GDB正在侦听并且我使用sysctl debug.kdb.enter=1强制恐慌时,它会进入远程KGDB。但是,当它没有收听时,系统就会冻结。

我想要的是在本地机器上输入ddb。做一些调试使用它;放弃到远程KGDB以获取使用KGDB最好的东西,然后在完成后切换回本地DDB。

有办法吗?如果是,请告诉我

1 个答案:

答案 0 :(得分:0)

KDB包含DDB& KDB后端,但有很多条件可用。要检查后端是否可用,请检查sysctl debug.kdb.available和debug.kdb.current(sys / kern / subr_kdb.c)。如果两个后端都可用,则debug.kdb.available应包含" ddb gdb"。

在后端(gdb / ddb)之间切换的可能方法是先输入ddb,然后调用gdb并进行调试。然后退出gdb,返回ddb(实际上会发生新的陷阱,似乎需要Ctrl + C)。这意味着在恐慌之前,应将debug.kdb.current设置为" ddb"。

我希望它会有所帮助。