Loading

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都直接变为反向命令。

程序调试方向设置为反向

posted @ 2022-12-29 09:43  刘跑跑  阅读(528)  评论(0编辑  收藏  举报