我想知道是否确实有一种方法可以在调试远程内核时在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。
有没有办法做到这一点?
发布于 2016-04-21 15:11:54
KDB包含DDB和KDB后端,但当它们可用时有很多条件。要检查后端是否可用,请检查sysctl debug.kdb.available和debug.kdb.current (sys/kern/subrkdb.c)。如果两个后端都可用,则debug.kdb.available应包含"ddb gdb“。
在后台(gdb / ddb)之间切换的可能方式是先进入ddb,然后调用gdb并进行调试。然后退出gdb,并返回到ddb (实际上会发生新的陷阱,似乎需要Ctrl+C )。这意味着在死机之前,应该将debug.kdb.current设置为"ddb“。
我希望它能有所帮助。
https://stackoverflow.com/questions/36709697
复制相似问题