我认为标题说明了一切! :)
我想知道在调试远程内核时是否确实有办法在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。
有办法吗?如果是,请告诉我
答案 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"。
我希望它会有所帮助。