• Linux开发工具之gdb(上)


    三、gdb调试(上)
    01.gdb:gdb是GNU debugger的缩写,是编程调试工作。
    功能:
      启动程序,可以按照用户自定义的要求随心所欲的运行程序;
      可让被调试的程序在用户所指定的调试的断点处停住(断点可以是条件表达式);
      当程序停住时,可以检测此时程序中所发生的事;
      动态改变量程序的执行环境。
    #vi smiple.c
    #include<stdio.h>
    #include<stdlib.h>
    long func(int n);
    int main(int argc, char *argv[])
    {
    printf("Entering main ... ");
    int i;
    long result = 0;
    for(i=1;i<=100;i++)
    {
    result += i;
    }
    printf("result[1-100] = %ld ",result);
    printf("result[1-10]",func(10));
    return 0;
    }
    long func(int n)
    {
    long sum = 0;
    int i;
    for(i=1;i<n;i++)
    {
    sum+=1;
    }
    return sum;
    }
    :wq
    #gcc -Wall -g(以便生成调试,将源文件显示出来) simple.c -o 
    simple
    #./simple
    #gdb simple
    (gdb)list(显示所有源代码)
    (gdb) l(同上)
    (gdb)break 10(在第10行设置断点)
    (gdb)info break(查看断点信息)  --ib(简写)
    (gdb)b func(在函数入口设置断点)
    (gdb)run --r(运行到断点处)
    (gdb)step --s(单步跟踪)
    (gdb)print i --p i(打印出i的当前值)
    (gdb)p result
    result=3
    (gdb)p i
    (gdb)s
    (gdb)until(跳出for循环,循环的下一条语句)
    (gdb)c(continue运行到下一个断点处)
    (gdb)直接按回车,使用上一次的命令
    (gdb)finish(结束单步调试)
    #vi Makefile
    .PHONY:clean all
    CC=gcc
    CFLAGS=-Wall -g
    BIN=simple main
    all:$(BIN)
    $(CC) $(CFLAGS) -c $< -o $@
    main:main.o search.o
    $(CC) $(CFLAGS) &^ -o $@
    clean:
    rm -f *.o $(BIN)
    :wq
    #gdb simple
    (gdb)r a b c(给程序加上启动参数)
    (gdb)list fun(查看fun的函数源码)
    (gdb)list file:fun(查看file文件中的fun函数源码)
    02.设置断点与观察点
    break 行号
    break fun
    break file:行号
    break file:fun
    break if<condition>-条件成立时程序停住
    info break(i b)-查看断点
    watch expr -变量expr值发生改变,程序停住
    delete n - 删除断点
    03.单步调试
    continue(c)-运行至下一个断点
    step(s)- 单步跟踪,进入函数,类似于VC中的step in
    next(n)-单步跟踪,不进入函数,类似于VC中的step out
    finish - 运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数等信息。
    until - 当厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体
    print(p)查看运行时的变量以及表达式
  • 相关阅读:
    SpringBoot Maven项目 Helloworld 测试
    Oracle client安装教程
    quartz定时任务时间设置
    maven导出项目依赖的jar包
    Java 集合类
    Webservice客户端动态调用服务端功能方法
    使用Eclipse自带的Axis1插件生成Web Service服务端客户端
    SpringBatch Sample (五)(复合格式文件的读、多文件的写)
    Mysql性能分析
    设置nginx中文件上传的大小限制度
  • 原文地址:https://www.cnblogs.com/baiyifan/p/5282141.html
Copyright © 2020-2023  润新知