linux c编程工具使用之gdb

来源:互联网 发布:淘宝联盟怎么发布产品 编辑:程序博客网 时间:2024/06/03 20:22

gdb

gdb:GUN debugger

  • 启动程序,可按照用户自定义的要求随心所欲的运行程序。
  • 可让被调试的程序在用户所指定的调试的断点处停住(断点支持条件表达式)
  • 当程序停住时,可以检查此时程序中所发送的事。
  • 动态改变程序的执行环境。

启动gdb调试程序

  • gdb
  • gdb core
  • gdb

一些选项

查看

  • list/l:查看最近10行源码
  • l 1:查看第一行起始的代码
  • l 2,10 查看第二行到第十行代码
  • 1 ,15最多查看到第15行代码
  • l main:查看主函数代码
  • list fun:查看fun函数源码
  • list file:fun 查看file中的fun函数源码

断点

  • break/b:设置断点
  • break 行号:设定断点
  • break fun
  • break file:行号
  • break file:fun
  • break if :条件成立时程序停住,比如b if i=50
  • info break:查看断点(也可缩写为i b)
  • watch expr:expr改变时,程序停住

单步调试

  • run(r):启动程序(可带参数,即传给程序的参数列表)
  • step(s):单步跟踪,进入函数,类似step in
  • next(n):单步跟踪,不进入函数,类似step out
  • print(p) 变量名(print变量值或表达式)
  • until:跳出循环(此时运行到循环外的下一条指令)
  • continue(c):运行到下一个断点
  • finish:运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。

查看运行时数据

  • print可缩写为p
  • print:查看变量值
  • ptype:查看类型
  • print array:查看数组
  • print *array@n:查看动态数组前n个元素
  • 对于静态数组array,print *array@2:表示打印从第0个元素开始的两个元素
  • print 变量名=值:更改变量的值
  • bt:函数调用栈回溯

程序错误

  • 编译错误
  • 运行时错误
  • 逻辑错误

  • 段错误就是由于访问非法地址而产生的错误,访问系统数据区,尤其是往系统保护的内存地址写数据。最常见的就是给一个指针以0地址;内存越界(数组越界,变量类型不一致等)访问到不属于你的内存区域。

core文件调试

  • 在程序崩溃时,一般会生成一个文件叫core文件。core文件记录的是程序崩溃时的内存映像,并加入调试信息。core文件生成的过程叫做core dump

生成core文件

  • ulimit -c 查看core-dump状态
  • 以下两条命令设置core文件大小
  • ulimit -c 数字(如:ulimit -c 1024)
  • ulimit -c unlimited

使用core文件

  • gdb 产生core文件的程序名 core文件
0 0
原创粉丝点击