zoukankan      html  css  js  c++  java
  • C学习笔记-gdb

    gdb即GNU debugger,用来调试程序

    gdb使用前提

    要使用gdb,则需要在编译源代码时候使用-g参数

    gcc -g –o test test.c
    

    启动gdb

    gdb 程序名 [corefile]
    

    corefile是可选的,但能增强gdb的调试能力
    Linux默认是不生成corefile的,所以需要在用户profile文件中添加ulimit -c unlimited,修改完成之后让profile文件及时生效
    另外程序错误时候会生成core或者core.*文件,也可作为其参数

    gdb的使用

    快速定位软件出错位置

    • 启动gdb调试错误
    gdb test core
    
    • 关闭多余软件信息
    gdb -q test core
    

    如果软件出错,就会打印出出错的语句

    使用gdb调试

    • 启动gdb
    gdb test
    
    • 运行程序
    (gdb) run
    
    • 显示导致段错误的执行函数树
    (gdb) where
    
    • 显示包含错误附近代码
    (gdb) list [m,n]
    

    m,n为可选参数,表示起始行和结尾行
    不带参数默认显示附近10行

    • 显示表达式、变量的值
    (gdb) print 变量(表达式) 
    (gdb) print 'file'::变量(表达式) ##''是必须的,以便让gdb知道指的是一个文件名。
    (gdb) print funcname::变量(表达式)
    

    e.g.

    (gdb) print i
    
    • 变量的类型
    (gdb) whatis i
    
    • 结构的定义
    (gdb) ptype st
    

    gdb的断点使用

    • break命令设置断点
    break linenum
    
    break funcname
    
    break filename:linenum
    
    break filename:funcname
    
    • 进入gdb调试模式
    gdb -q test
    
    (gdb) break 5 
    
    (gdb) run
    

    以上是进入gdb调试,在代码第5行设置断点,运行程序

    • 查看已设置断点
    (gdb) info break
    
    • 从断点以后继续执行
    (gdb) continue
    
    • 删除一个断点
    (gdb) delete
    
    • 改变一个变量的值
    (gdb) set variable varname = value
    
    • step命令
      当遇到一个函数的时候,step将进入函数,每次执行一条语句,相当于step into
    (gdb) step
    
    • next命令
      当遇到一个函数的时候,next将执行整个函数,相当于step over
    (gdb) next
    
    • return [value]命令
      停止执行当前函数,将value返回给调用者,相当于step return
    (gdb) return [value]
    
  • 相关阅读:
    8、linux-wc命令 打印出文件中字符行数
    7、linux-排序命令 sort
    6、linux-查看文件 ls
    5、linux-查找命令 grep
    4、linux-文档编辑命令:vi
    第二次作业
    JSP 第一次作业 开发环境搭建
    第十一次作业—安卓课程设计报告
    第十次作业—listview+sqlite 购物车
    第九次作业sharedpreferences实现数据存储-记住账号密码
  • 原文地址:https://www.cnblogs.com/cj5785/p/10664754.html
Copyright © 2011-2022 走看看