• GDB基本调试


    在linux进行程序调试通常有二种,一是通过printf打印日志,这也是非常方便的;另一种就是gdb调试。

    进行gdb调试就如在vs中调试一样简单,通过gdb命令完全可以找到程序中任何错误。

    下面贴出gdb命令,看一眼或者用一次不可能完全记住,需要多加练习,下面放上gdb调试的命令,遇到想不起来方便查看。

    通过进行gdb调试的时候,在编译的时候需要加上-g,

    如:gcc -g main.c -o main(注:-g 只是把原代码行数等记录在main里,然后通过索引到源代码中,所以调试的时候源代码必须存在)

    然后运行:gdb main

    在linux,可以通过help命令查看。

    下面通过一个小程序学习gdb常用命令的使用:

    程序文件为:gdbtest.c

    源代码:

    #include <stdio.h>

     int add(int a, int b)

    {

        int sum=a+b;

        return sum;

     }

     int main(void)

     {

       int a=10;

       int b=15;

       int c=add( a, b);

       printf("result=%d ",c);

       return 0;

     }

    编译命令:gcc -g gdbtest.c -o main

    调试:gdb main

    下面就可以开始进行gdb调试了

    GDB常用命令: 命令:strat 描述:开始执行程序,停止在main函数的第一句等待命令

    命令:finish 描述:一直运行当前函数中返回的位置前,等待下一步命令

    命令:quit 描述:退出gdb调试

    命令:list/l   (无/函数/行号) 描述:查看代码,除了指定之外从第一行开始显示

    命令:s/step、n/next 描述:执行下一句,区别是在有函数调用的时候s进入函数,而n不进入到函数里。vs调试的时候s=f11 n=f10

    命令:bt/backtrace 描述:查看各级函数调用及其参数

    命令:frame/f  帧编号(注:可以通过bt查看) 描述:选择栈帧 比如::f 0

    命令:info/i locals  描述:查看当前栈帧中的局部变量的值

    命令:print/p 表达式 描述:打印表达式的值,可以通过表达式去修改变量的值或者调用函数 比如:p sum

    命令:set var 变量 描述:修改变量的值 比如:set var sum=0

    命令:break/b 行号/函数 描述:在某一行或者函数设置断点

    命令:break 行号/函数 if条件 描述:设置条件断点

    命令:info/i breakpoints 描述:查看当前设置的断点

    命令:disable breakpoints 断点号 描述:禁用此断点 断点号可以通过info breakpoints查看

    命令:enable breakpoints 断点号 描述:启用此断点 断点号可以通过info breakpoints查看

    命令:delete breakpoints 断点号 描述:删除断点,断点号可以通过info breakpoints查看

    命令:display 变量 描述:跟踪查看此变量,只要停止都显示次变量的值

    命令:undisplay 跟踪显示号 描述:取消此跟踪

    命令:continue/c 描述:继续执行到下一个断点或者观察点

    命令:run/r 描述:从头开始执行程序

    命令:watch 变量 描述:设置观察点 一般都是break在要观察变量处设置断点,用run 执行到断点 使用watch 设置观察点 使用continue看观察点是否变化,当发生变化时停止

    命令:info/i watchpoints 描述:查看当前设置的观察点

    命令:x 变量 描述:从某个位置开始打印存储单元的内容,全部当字节看,不区分属于哪个变量比如x/7b input  7代表7组 b是一个字节代表一组

    这里列举了常用的调试gdb命令,还有很多命令比如多线程调式之类的,可以参考下面网址,里面涵盖了所有的gdb命令:

    http://wangcong.org/articles/learning-gdb.cn.html

  • 相关阅读:
    【Java-算法】 计算十六进制校验位
    【Android-Zxing框架】二维码扫描框区域大小与不同手机分辨率适配问题
    【Android-开发环境】 eclipse开发环境搭建
    【Android-布局复用】 多个界面复用一个布局文件(二)
    【Android-布局复用】 多个界面复用一个布局文件(一)
    QQ群打卡脚本
    Linux CentOS 方舟生存进化开服教程[转]
    jwt认证

    drf
  • 原文地址:https://www.cnblogs.com/lanye/p/3425255.html
Copyright © 2020-2023  润新知