gdb使用
NJU gdb六步走
- 启动gdb,加载可执行文件
- 设置断点
break main
入口处设置断点 - 启动程序
run (参数)
- 查看程序当然状态
info register (EIP)
: 显示所有寄存器(或只有EIP寄存器)的内容- 栈:保存过程执行时的数据信息
- 继续下一条指令
step
或si
(机器指令)
- 退出
quit
1.0 Cprograming
原网址: https://www.cprogramming.com/gdb.html
gcc main.c -g -Wall -Werror -o main 启动编译
gdb main 开始debug
list 列出代码
break 行 设置断点
info break 断点信息
run 运行程序
next或step 进行单步编译(next跳过函数)
print <value> 打印变量的值
continue 跳到下一个断点位置
quit 退出
2.0 LinuxC一站式编程
参考网址: https://docs.huihoo.com/c/linux-c-programming/ch10.html
gcc main.c -g -o main 即可开始编译,-Wall生成所有警告
start 开始执行函数(执行到main函数第一句)
run 像./程序一样执行程序(除非遇到断点才会停下)
finish 让函数执行到返回值为止
backtrace 查看调用帧命令(可以列出当前执行代码行,并且把变量替换为你传入的数字
info locals 查看局部变量的值, local(a. 局部的)
frame 1 | i locals 查看1号栈帧函数(如main)的局部变量
set var sum=0 把sum的值设置为0
print result[2]=33 把result[2]的值修改为33
pirnt sum 打印sum的值
display sum 每次执行都打印sum的值
undisplay 1 取消跟踪编号为1的变量(如1:sum)
break 9 在第九行设置断点(和continue搭配使用)
break 9 if sum != 0 仅当sum不为0时才中断
info breakpoint 查看已经设置的断点
delete breakpoints 2 删除断点2(去掉2表示删除全部断点)
disable breakpoints 2 禁用编号为2的断点
enable 2 开启编号为2的断点
watch input[5] 在input[5]处设置观察点(搭配continue使用)
info watchpoints 查看当前观察点
x(/7bx) input 从input第一个字节开始,打印7个字节;
7表示打印7组,b表示每个字节一组,x表示按16进制打印(括号内可以不用,但只能打印一组)
3.0 NJU ICS
- gcc -g 表示带调试信息,单步调试必须加入
- -m32 表示编译成x86-32位指令
- -o0表示不优化