c - 如何使 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
但它真的很慢。有没有办法让它更快?
解决方案
有没有办法让它更快?
是的:不要那样做。
想想单步是如何工作的。在支持单步硬件的处理器上,GDB 必须
- 启用单步
- 恢复劣势
- 等待操作系统交付
SIGCHLD
- 查询当前寄存器的劣质(
$pc
主要)通过ptrace
- 解码并打印当前指令
...重复每条指令。预计这将比本机执行慢约 1000-10000 倍。
通常的解决方案是使用一些跟踪机制。例如,使用intel_pt
跟踪只会使这仅比全本机速度稍慢。
我在 QEMU 上的 Fedora RiscV 中运行这个 GDB。
现在您正在模拟 GDB 本身,增加了 10 倍或更多的减速因素。
您可能想要做的是让 QEMU 记录它执行的指令。
在 Google 中输入“qemu 跟踪指令”会产生这篇文章(以及其他内容)。
推荐阅读
- html - 如何构建响应式倾斜布局?
- node.js - “int”类型不是“String”类型的子类型
- javascript - 在不使用 FCM、One Signal、APN 等的情况下使用 Nodejs 项目推送通知
- java - Eclipse:无法在 Java Web 应用程序上编辑部署程序集
- sorting - 如何在 jcl 排序卡中将 s9(12)v9(2) 移动到 x(15)
- windows - Wix 工具集,MSI 安装程序:未在更改模式下创建应用程序快捷方式
- arrays - 根据 Reactjs 中的属性将水果数组存储在两个新数组中
- angular - 找不到源地图由于加载超时角度而取消加载
- wix - 如何仅更改降级错误对话框的标题?
- eloquent - Laravel 通过多对多关系分组