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