gdb的基本使用

1、前期准备

  • gcc编译的时候要带参数-g,编译出来的可执行文件才带断点信息,否则无法断点;
    • gcc -g xxx.c -o xxx.out // xxx.c为源文件,.out为输出可执行文件名字

2、几条命令

  • list
    • 简写为l
    • 查看源代码,默认为main函数文件
    • l xxx.c:20,则是查看xxx.c的第20行代码
    • l xxx.c:main,查看xxx.c的main函数
    • 再次执行则是显示后续的内容
  • break n
    • n为代码行号,如break 37,可简写为b 37
    • 也可以跟条件,如:break 37 if xxx=xxx;
    • 行号也可以用函数名来代替,如break main,在main函数处打断点
  • delete
    • delete n为break编号,可删除断点
  • info breakpoints
    • 查看当前所有断点,可简写为i b
  • start
    • 执行程序,只执行一步
  • run
    • 执行程序
  • next
    • 单步执行下一行代码,简写为n
  • step
    • 单步执行递进,如果是函数则进入函数体内部,如果没有则下一步
  • finish
    • 跳出当前的函数体,如果处在循环体中无法跳出
  • continue
    • 简写为c,继续执行,如果有断点则一直到下一个断点位置
  • print
    • 简写为p,查看变量值,p a,查看变量a的值
  • set var
    • 设置变量值,如set var a = 12;
  • ptype
    • 查看变量类型
  • display
    • 追踪变量值,display a,则为显示变量a的值,每次执行都会显示
    • 可重复添加,显示追踪的全部值
  • undisplay
    • 取消跟踪变量,display n,n为追踪变量的编号
  • u
    • 跳出单次循环,类似循环中的contiune
  • quit
    • 退出gdb调试
  • set follow-fork-mode
    • parent —> 跟踪父进程
    • child —> 跟踪子进程

Leave a Reply