gdb调试工具

gdb调试工具简介

  • Linux系统中包含了GNU调试程序gdb,它是一个用来调试C和C++程序的调试器。可以使程序开发者在程序运行时观察程序的内部结构和内存的使用情况。gdb所提供的一些功能如下:

    • 运行程序,设置所有的能影响程序运行的参数和环境;
    • 控制程序在指定的条件下停止运行;
    • 当程序停止时,可以检查程序的状态;
    • 修改程序的错误,并重新运行程序;
    • 动态监视程序中变量的值;
    • 可以单步执行代码,观察程序的运行状态。
  • gdb调试的对象是可执行文件,而不是程序的源代码文件,然而并不是所有的可执行文件都可以用gdb调试。如果要让产生的可执行文件可以用来调试,需在执行gcc编译指令时,加上-g参数,指定程序在编译时包含调试信息。调试信息包含程序里的每个变量的类型和在可执行文件里的地址映射以及源代码的行号。gdb利用这些信息使源代码和机器码相关联。

gdb常用调试命令

  • 编译命令

    gcc -g -o debugme debugme.c
    
  • 进入调试命令

    gdb debugme
    
  • 常用调试命令

    • break 行号、break 函数名、break 文件名:行号(函数名) 和info break、disable 断点编号、enable 断点编号
    • run
    • step
    • next
    • print i
    • continue
    • finish
    • quit
    • 回车执行上一条调试命令

gdb使用进阶

  • gdb -d 目录名 //指出源码所在位置

  • 与print有关

    • print ary[0]@5 //显示连续内存的数据
    • print /x ary[0]@5 //以16进制显示
    • print &i、print *ary //显示变量地址、指针指向的变量值
  • break 24 if i==15 //条件断点

  • watch命令 //设置监视点,监视表达式的变化。

  • rwatch命令 //设置读监视点,当监视表达式被读时将程序挂起,等待调试。此命令的语法与watch相同。

  • set variable i=10 //运行程序时人工改变变量值

  • 与子函数调用有关

    • return 返回值 //放弃正在运行的子程序,并以返回值返回,以便测试边界值。
    • call 函数名(参数值或变量) //临时人工调用1个函数
  • backtrace、where //显示程序当前运行位置及函数调用栈

  • up、down //遍历函数堆栈

  • print 函数名::变量名 //当不同函数存在重名局部变量时

  • print 文件名::变量名 //当不同源文件存在重名static全局变量时

gdb使用小技巧

  • list //列出当前运行行附近的行
  • print $3 //显示曾经查询过的结果值
  • whatis i、whatis ary、whatis index_to_the_moon //显示变量或函数的数据类型
  • ptype nzs //明细显示变量或函数的数据类型
  • search 字符串、reverse-search 字符串 //在源码中正向(反向)查找字符串
  • shell pwd //执行shell命令
  • info files命令 //显示调试文件的信息。
  • info func命令 //显示所的函数名。
  • info local命令 //显示当前函数的所有局部变量的信息。
  • info prng命令 //显示调试程序的执行状态。

gdb特殊使用方法

  • set args 参数1 参数2 …
  • set environment env1 env2 …
  • unset environment env1 env2 …

你可能感兴趣的:(gdb,linux,c++)