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命令停止记录模式,然后自动删除执行日志。

image-20221225191757292

设置执行标签bookmark#

开启记录和回放模式后,便会生成程序执行日志,可以根据调试需求在关键位置设置标签,方便后面一键反向到历史标签位置。bookmark设置执行标签;info bookmarks查看标签,第一个是标签编号,第二个是指令地址,第三个是执行日志中的排序;goto-bookmark num跳到num编号的标签。

image-20221225192609307

反向单步执行rn/rni/rs/rsi#

reverse-next (rn)就是next(n)单步执行的反向命令,其他反向命令,以此类推。

反向调试rn和rs

反向调试rni和rsi

反向执行到上个断点rc#

reverse-continue (rc)命令反向执行到程序记录的上个断点位置。

反向调试rc

反向执行到函数调用处reverse-finish#

反向调试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 国际」许可协议进行许可。

posted @   刘跑跑  阅读(557)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示