GDB简介
GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具。
一般来说,GDB主要帮助你完成下面四个方面的功能:
启动你的程序,可以按照你的自定义的要求随心所欲的运行程序(按着自己的想法运行)。
可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
当程序被停住时,可以检查此时你的程序中所发生的事。
你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。
GDB支持以下编程语言 :
Ada
Assembly
C
C++
D
Fortran
Go
Objective-C
OpenCL
Modula-2
Pascal
Rust
GDB基本命令
# 启动 gdb 并加载程序
gdb ./program
# 启动 gdb 并附加到正在运行的进程
gdb -p PID
# 退出 gdb
(gdb) quit
# 或简写
(gdb) q# 运行程序
(gdb) run
# 或简写
(gdb) r
# 带参数运行
(gdb) run arg1 arg2# 在指定行设置断点
(gdb) break 10
# 或简写
(gdb) b 10
# 在函数入口设置断点
(gdb) break main
(gdb) break function_name
# 查看所有断点
(gdb) info breakpoints
# 删除断点
(gdb) delete 1 # 删除编号为1的断点
(gdb) delete # 删除所有断点# 继续执行直到下一个断点
(gdb) continue
# 或简写
(gdb) c
# 单步执行(进入函数)
(gdb) step
# 或简写
(gdb) s
# 单步执行(不进入函数)
(gdb) next
# 或简写
(gdb) n
# 执行完当前函数并返回
(gdb) finish# 查看当前行附近的代码
(gdb) list
# 或简写
(gdb) l
# 查看指定行附近的代码
(gdb) list 15
# 查看指定函数的代码
(gdb) list main# 打印变量值
(gdb) print variable_name
# 或简写
(gdb) p variable_name
# 修改变量值
(gdb) print variable_name = new_value
# 查看变量类型
(gdb) ptype variable_name
# 查看内存内容
(gdb) x/10xw &variable # 以16进制查看10个字(word)# 查看调用栈
(gdb) backtrace
# 或简写
(gdb) bt
# 切换到指定栈帧
(gdb) frame 2
# 或简写
(gdb) f 2# 加载核心转储文件
gdb ./program core
# 查看崩溃时的调用栈
(gdb) bt