3 回答
TA贡献1785条经验 获得超4个赞
我会尝试:
(gdb) target remote localhost:1234
(gdb) continue
使用'-s'选项可使qemu侦听端口tcp :: 1234,如果您在同一台计算机上,则可以将其作为localhost:1234连接。Qemu的“ -S”选项使Qemu停止执行,直到您发出Continue命令为止。
最好的办法是看一本不错的GDB教程,以了解您的工作。这个看起来不错。
TA贡献1811条经验 获得超4个赞
BjoernID的答案对我而言并不是很有效。在第一次继续之后,没有断点到达,并且在中断时,我会看到诸如以下的行:
0x0000000000000000 in ?? ()
(gdb) break rapl_pmu_init
Breakpoint 1 at 0xffffffff816631e7
(gdb) c
Continuing.
^CRemote 'g' packet reply is too long: 08793000000000002988d582000000002019[..]
我猜想这与不同的CPU模式有关(BIOS引导时是BIOS的实模式,而Linux是引导时的长模式)。无论如何,解决方案是先运行QEMU而不等待(即,不使用-S):
qemu-system-x86_64 -enable-kvm -kernel arch/x86/boot/bzImage -cpu SandyBridge -s
就我而言,我需要在引导过程中进行一些中断,因此,在经过十分之一秒后,我运行了gdb命令。如果您有更多时间(例如,您需要调试手动加载的模块),那么时间实际上就无关紧要。
gdb允许您指定启动时应运行的命令。这使自动化有点容易。要连接到QEMU(现在应该已经启动)了,中断一个函数并继续执行,请使用:
gdb -ex 'target remote localhost:1234' -ex 'break rapl_pmu_init' -ex c ./vmlinux
- 3 回答
- 0 关注
- 1176 浏览
添加回答
举报