首页 > 解决方案 > 如何使 GDB stepi 更快?

问题描述

我正在使用 GDB 来记录执行的汇编指令。

这是我制作的 GDB 脚本:

日志文件

set confirm off
tbreak start_trigger
r
set logging overwrite on
set logging on
set height 0
set style enabled off
while (1) 
    x/i $pc
    stepi
end
quit

我运行 gdb 使用

$ gdb results-mte/aha-compress.elf -x script.gdb -batch

这工作得很好并且写了gdb.txt但它真的很慢。有没有办法让它更快?

标签: cdebugginggdb

解决方案


有没有办法让它更快?

是的:不要那样做。

想想单步是如何工作的。在支持单步硬件的处理器上,GDB 必须

  • 启用单步
  • 恢复劣势
  • 等待操作系统交付SIGCHLD
  • 查询当前寄存器的劣质($pc主要)通过ptrace
  • 解码并打印当前指令

...重复每条指令。预计这将比本机执行慢约 1000-10000 倍。

通常的解决方案是使用一些跟踪机制。例如,使用intel_pt跟踪只会使这仅比全本机速度稍慢。

我在 QEMU 上的 Fedora RiscV 中运行这个 GDB。

现在您正在模拟 GDB 本身,增加了 10 倍或更多的减速因素。

可能想要做的是让 QEMU 记录它执行的指令。

在 Google 中输入“qemu 跟踪指令”会产生这篇文章(以及其他内容)。


推荐阅读