我正在使用 kgdb/远程 gdb 调试 linux ubuntu 内核。我有 2 台计算机 - ubuntu 目标和 Windows 主机。计算机使用串行端口和零调制解调器电缆连接。
在目标 ubuntu 系统中启用了 KGDB 支持,来自 KGDB 的命令选项:
kgdbwait kgdboc=ttyS0,115200
在我的 Windows 系统上,我有 MinGW gdb build (x86_64):
GNU gdb (GDB) 7.4 版权所有 (C) 2012 Free Software Foundation, Inc. 此 GDB 配置为“x86_64-w64-mingw32”。
我启动我的目标系统,它一直等到远程调试器连接。我在 GDB 窗口中输入以下命令:
(gdb) set remotebaud 115200
(gdb) target remote COM4
我的 gdb 能够连接到目标并打印以下内容:
在 kernel/debug/debug_core.c:1043 wmb()使用 COM4
???() 进行远程调试;/* 断点后的同步点 */
然后我输入命令来设置断点,以便在操作系统启动时能够返回 gdb:
(gdb) b sys_sync
0xffffffff8124a710 处的断点 1
我还在同一设置的另一次运行中尝试了硬件辅助断点:
(gdb) hbreak sys_sync
当我从目标 ubuntu 控制台输入同步命令时,此断点设置应导致内核喙返回到调试器。
在 GDB 中点击继续后,操作系统启动正常,但我无法将控制权带回 gdb。我尝试在 sys_sync 上设置断点,我试过了
echo g > /proc/sysrq-trigger
在所有情况下都没有成功。
非常有趣:如果我最初没有在 sys_sync 中设置断点,那么稍后输入同步命令什么也不做。如果我设置 sys_sync 断点,稍后输入同步命令会完全停止目标计算机 - 所以我想在这种情况下实际设置了断点。
如何闯入调试器?GDB 对任何 CTrl-C 命令都没有响应,因此在我最初点击继续后无法继续调试。
可能是架构不兼容(Windows gdb - Linux 目标) - 但似乎确实设置了断点。
请帮忙