GDB反向调试命令介绍和操作演示
反向调试命令汇总#
命令 | 作用 |
---|---|
record | 开启记录模式 |
record stop | 停止记录 |
bookmark | 设置执行标签 |
info bookmarks | 查看标签 |
goto-bookmark num | 跳到num编号的标签 |
reverse-step (rs) | 反向执行到上一行代码,遇函数则跳入 |
reverse-stepi (rsi) | 反向执行到上一行汇编,遇函数则跳入 |
reverse-next (rn) | 反向执行到上一行代码,遇函数则跳过 |
reverse-nexti (rni) | 反向执行到上一行汇编,遇函数则跳过 |
reverse-continue (rc) | 反向执行到上个断点 |
reverse-finish | 反向执行到函数调用的位置 |
set exec-direction reverse | 设置程序调试方向为反向,此时s/si/n/ni/continue/finish都为反向 |
set exec-direction forward | 设置程序调试方向为正向 |
测试用例#
/*================================================================
* Author: LiuHanxu
* Date: 2022-12-25
* Description: This test used for reverse debugging
================================================================*/
#include<stdio.h>
int fun(int n) {
int sum = 0;
for (int i=0; i<=n; i++)
sum += i;
return sum;
}
int main() {
int x = 10, y = 0;
y = fun(x);
printf("y = %d\n", y);
return 0;
}
开启记录模式record
#
程序开始调试后,输入record
开启记录和回放模式,生成程序执行日志,随后即可基于日志进行反向调试,任意切换正向反向。
record stop
命令停止记录模式,然后自动删除执行日志。
设置执行标签bookmark
#
开启记录和回放模式后,便会生成程序执行日志,可以根据调试需求在关键位置设置标签,方便后面一键反向到历史标签位置。bookmark
设置执行标签;info bookmarks
查看标签,第一个是标签编号,第二个是指令地址,第三个是执行日志中的排序;goto-bookmark num
跳到num编号的标签。
反向单步执行rn/rni/rs/rsi
#
reverse-next (rn)
就是next(n)
单步执行的反向命令,其他反向命令,以此类推。
反向执行到上个断点rc
#
reverse-continue (rc)
命令反向执行到程序记录的上个断点位置。
反向执行到函数调用处reverse-finish
#
设置程序调试方向set exec-direction reverse
#
默认程序调试方向为forward,当set exec-direction reverse
设置程序调试方向为反向后,此时s/si/n/ni/continue/finish都直接变为反向命令。
作者:liupaopao
出处:https://www.cnblogs.com/liuhanxu/p/17011772.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构