gdb使用

NJU gdb六步走

  1. 启动gdb,加载可执行文件
  2. 设置断点 break main 入口处设置断点
  3. 启动程序 run (参数)
  4. 查看程序当然状态
    • info register (EIP): 显示所有寄存器(或只有EIP寄存器)的内容
    • 栈:保存过程执行时的数据信息
  5. 继续下一条指令
    • stepsi(机器指令)
  6. 退出 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表示不优化