一.gdb功能
1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2.可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3.当程序被停住时,可以检查此时你的程序中所发生的事。
4.动态的改变你程序的执行环境。
注:编译时需要添加-ggdb3参数
二.gdb调试常用指令
a).运行gdb
1.gdb binary file //运行可执行程序
2.gdb attach pid //运行进程id
b).设置断点
1.b fun_name(函数名)
2.b file_name.c:xxx(文件对应行)
3.b x(当前文件行号)
c).查看断点
1.i b
d).其他指令
1.r 运行程序直到遇到断点 如果没有就执行至结束
2.c 继续执行程序
3.d break n(断点序号) 删除断点
4.n 单步调试
5.p variable 查看变量值
x按十六进制格式显示变量。
d按十进制格式显示变量。
t按二进制格式显示变量。
c按字符格式显示变量。
f按浮点数格式显示变量。//例:p/x variable
6.finish 结束当前函数
7.q 退出
三.coredump
通常情况下coredmp包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等。可以理解为把程序工作的当前状态存储成一个文件。许多程序和操作系统出错时会自动生成一个core文件。
a).coredump的设置
1).在终端中输入ulimit -c如果结果为0,说明当程序崩溃时,系统并不能生成core dump
2)使用ulimit -c unlimited命令,开启core dump功能,并且不限制生成core dump文件的大小。如果需要限制,加数字限制即可。ulimit - c1024
3)默认情况下,core dump生成的文件名为core.xxx,而且就在程序当前目录下
4)通过修改/proc/sys/kernel/core_pattern可以控制core文件保存位置和文件格式。例如:将所有的core文件生成到/corefile目录下,文件名的格式为core-命令名-pid-时间戳. echo "/corefile/core-%e-%p-%t" >/proc/sys/kernel/core_pattern
b).coredump的解析方法
1)gdb binnary_file core.XXX