• gdb调试c程序


    GDB是GNU开源组织发布的一个强大的UNIX/LINUX下的程序调试工具,因为很多优秀的应用都是C开发的,如:mysql、redis、php等,掌握gdb对了解这些应用和学习更是如虎添翼

    gdb基本命令

    命令(缩写) 功 能
    run(r) 启动或者重启一个程序。
    list(l) 显示带有行号的源码。
    continue(c) 让暂停的程序继续运行。
    next(n) 单步调试程序,即手动控制代码一行一行地执行。
    step(s) 如果有调用函数,进入调用的函数内部;否则,和 next 命令的功能一样。
    until(u)
    until location(u location)
    当你厌倦了在一个循环体内单步跟踪时,单纯使用 until 命令,可以运行程序直到退出循环体。
    until n 命令中,n 为某一行代码的行号,该命令会使程序运行至第 n 行代码处停止。
    finish(fi) 结束当前正在执行的函数,并在跳出函数后暂停程序的执行。
    return(return) 结束当前调用函数并返回指定值,到上一层函数调用处停止程序执行。
    jump(j) 使程序从当前要执行的代码处,直接跳转到指定位置处继续执行后续的代码。
    print(p) 打印指定变量的值。
    quit(q) 退出 GDB 调试器。
    display(disp) 跟踪查看某个变量,每次停下来都显示它的值
    watch 监视变量值的变化
    delete 输入命令delete, 再加上断点编号,可以删除对应编号的断点
    clear 输入命令clear, 再加上行号,可以删除对应行号的断点
    disable 输入命令disable, 再加上断点编号,可以禁用该断点

    准备一段c程序

    #include <stdio.h>
    int print(int num){
        int ret = num * num;
        return ret;
    }
    int myfunc(int num){
        int i = 1;
        int sum = 0;
        while(i <= num){
            sum += print(i);
            i++;
        }
        return sum;
    }
    int main(){
        int num =0;
        scanf("%d", &num);
        int result = myfunc(num);
        printf("%d", result);
        return 0;
    }

    编译成能gdb调试的可执行文件

    gcc -g -o main.out main.c

    -g 参数表示可用于gdb调试

    开始gdb调试

    gdb  main.out  #运行编译好的c程序

    list    #查看代码

    break  8   #在程序第8行打断点

    info  breakpoints    #查看断点信息

    run  # 打完断点后可使用run 重新运行程序

    12  #是程序中接收的输入, 与gdb 调试无关

    n   #next  下一步,如果是下一步是方法,不进入方法内

    s   #step  下一步,如果下一步是方法,进入方法内

    finish  #跳出当前运行的方法,并在跳出方法后暂停程序的执行

    c   #continue ,继续运行至下一个断点或程序末尾

    问题汇总:

    Missing separate debuginfos, use: debuginfo-install glibc-2.17-222.el7.x86_64

    # vim /etc/yum.repos.d/CentOS-Debuginfo.repo

    enable=1

    yum install glibc
    debuginfo-install glibc-2.17-222.el7.x86_64

    GDB详细教程

  • 相关阅读:
    一句SQL查询没门课程都低于80分的学生信息
    ★查询给定字符串中,出现最多的字符和出现的次数
    Eclipse自动加载源码----Attach Java Source
    Eclipse 修改workspace默认的字符集为 utf-8
    浅谈 Spring的AOP的实现 -- 动态代理
    浅谈高并发的理解
    为什么使用单例模式?
    正排索引 与 倒排索引
    图片裁剪
    微信小程序开发笔记
  • 原文地址:https://www.cnblogs.com/xbblogs/p/13572677.html
Copyright © 2020-2023  润新知