zoukankan      html  css  js  c++  java
  • gdb详解

    http://blog.csdn.net/nixiangxiren/article/details/6935052

    程序的调试过程主要有:单步执行,跳入函数,跳出函数,设置断点,设置观察点,查看变量。本文将主要介绍linux下的强大调试工具是怎么完成这些工作的。
    之所以要调试程序,是因为程序的运行结果和预期结果不一致,或者程序出现运行时错误。调试的基本思想是:分析现象->假设错误原因->产生新的现象去验证假设
    1.gcc -g main.c
    要用gdb调试程序,必须在编译时加上-g选项,-g选项的作用是在可执行文件中加入源文件信息,但并不是将源文件嵌入可执行文件,所以在调试时必须保证gdb必须能找到源文件

    2.$gdb 可执行文件名
    进入gdb调试环境
    3.(gdb)list n|list|list 函数名|l n|l|l 函数名
    在调试过程中查看源文件,n为源文件的行号,每次显示10行。list可以简写为l,不带任何参数的l表示从当前执行行查看。
    注意:在(gdb)中直接回车,表示执行上一条命令。
    4.(gdb)start|s
    开始执行程序,并main函数的停在第一条语句处。
    (gdb)run|r
    连续执行程序,直到遇到断点
    (gdb)continue|c
    继续执行程序,直到下个断点
    (gdb)next|n
    执行下一行语句
    (gdb)step|s
    进入正在执行的函数内部
    (gdb)finish
    一直执行到当前函数返回,即跳出当前函数,执行其调用函数
    5.变量信息管理
    (gdb)info 变量名|i 变量名|i locals
    i变量名查看一个变量的值,i locals查看所有局部变量的值
    修改变量的值
    (gdb)set var 变量名=变量值
    (gdb) print 表达式
    打印表达式,通过表达式可以修改变量的值,p 变量名=变量值
    (gdb)display  变量名
    使得程序每次停下来都会显示变量的值
    x/nbx 变量名
    查看从变量名开始的n个字节,例x/7bx input 表示查看从变量input开始的7个内存单元的内容
    6.查看函数调用栈
    (gdb)backtrace|bt
    查看其调用函数的信息
    (gdb)frame n|f n
    n为栈的层次,然后可以用其他命令(info)查看此级别的变量信息
    7.断点管理
    设置断点
    break n|break 函数名|b n| b 函数名|b n(函数名)if 条件
    n为行号,添加if表示设置条件断点,只有条件为真时,才中断
    查看断点
    info breakpoints|i breakpoints
    删除断点
    delete breakpoints n
    使断点失效
    disable breakpoints n
    使断点生效
    enable breakpoints n
    其中n为断点的序列号,可以用info breakpoints查看
    8观察点管理
    断点是程序执行到某行代码是触发,观察点是程序访问某个内存单元时触发
    (gdb)watch 变量名
    当程序访问变量名指定的内存单元时,停止程序
    info watchpoints|delete watchpoints
    类似断点管理
    9退出gdb环境
    (gdb)quit|q

  • 相关阅读:
    Scala学习笔记(八):Scala的层级
    Scala学习笔记(七):闭包
    Scala学习笔记(六):函数
    Struts 2(八):文件上传
    Struts 2(七):国际化
    Struts 2(五):输入校验 & 校验框架
    Struts 2(四):类型转换
    Struts 2(三):示例→基于Struts 2的用户注册模块
    Struts 2(二):使用Struts2
    Struts 2(一):初识Struts
  • 原文地址:https://www.cnblogs.com/jingzhishen/p/3783499.html
Copyright © 2011-2022 走看看