zoukankan      html  css  js  c++  java
  • GDB基础学习

    GDB基础学习

    • 要调试C/C++程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的-g参数可以做到这一点,比如:
    gcc -g test.c -o test
    

    GDB 的命令概貌

    使用help命令

    • 通过gdb test启动gdb后,就进入了gdb的调试环境,就可以使用gdb 的命令开始调试程序了,gdb的
      命令可以使用help命令来查看:

    • 这里可以看到help命令只是列出了gdb命令的种类,如果要知道所有的命令可以输入help all,也可以通过help <class>查看种类中的命令,或通过help <command>查看命令的帮助。

    • 比如我们可以通过help breakpoints来查看断点的命令:

    • 『需要注意』:gdb中的命令可以简写,如设置断点的break可以简写为b(当然,命令的前几个字符要标志着唯一的命令);在linux下,可以敲击两次TAB键来补齐命令的 全称,如果有重复的,gdb会把其列出来。比如输入b敲击两次TAB键:

    基本命令

    命令 解释 示例
    List(l) 列出文件的代码清单 (gdb) l
    Printf(p) 显示指定变量(临时变量或全局变量)的值。 (gdb) p i
    (gdb) p nGlobalVar
    Run(r) 运行被调试的程序。如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。 (gdb) r
    Continue(c) 继续执行被调试程序,直至下一个断点或程序结束。 (gdb) c
    Breakpoint(b) 1.函数断点: 在进入指定函数时停住。
    2.行断点:在指定行号停住。
    3.条件断点:break ... if ...可以是上述的参数,condition表示条件,在条件成立时停住。比如在循环境体中,可以设置break if i=100,表示当i为100时停住程序。
    4.临时断点:(tb 行号)
    (gdb) b main
    (gdb) b 8
    (gdb) b if i=100
    (gdb) tb 15
    Step(s) 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数
    相当于其它调试器中的“Step Into (单步跟踪进入)”。
    (gdb) s
    Next(n) 执行一行源程序代码,此行代码中的函数调用也一并执行;
    相当于其它调试器中的“Step Over (单步跟踪)”。
    (gdb) n
    Info(i) 显示各类信息 (gdb) i r
    Backtrace(bt) 打印函数调用堆栈 (gdb) bt
    Quit(q) 退出gdb调试 (gdb) q

    实例学习

    我们用下面的代码来学习:

    #include <stdio.h> 
    int func(int n)
    {
        int sum=0,i;
        for(i=0; i<n; i++)
        {
             sum+=i; 9
            
        }
            return sum; 
    }
    
    main() 
    {
        int i;
        long result = 0; 
        for(i=1; i<=100; i++) 
        {
            result += i;
        }
        printf("result[1-100] = %d 
    ", result );
        printf("result[1-250] = %d 
    ", func(250) ); 
        
    }
    

    首先vim一个test.c,再输入gcc -g test.c -o test进行编译,编译成功后输入gdb test启动gdb进行调试:

    输入l列出源码,再敲击回车可以看到所有代码:

    接下来在第16行通过b 16设置断点;通过b func在func函数处设置断点,info b可以查看断点信息如图:

    输入r运行程序,会停到断点处;再输入n单条语句执行,可以看到循环在一条一条执行;为了快速一点,输入c直接把循环执行完:

    我们也可以输入b 16 if i=50来设置条件断点,run之后可以看到程序停到了断点处,此时printf i的值为50:

  • 相关阅读:
    关于asp.net页面自定义404错误码返回302的最新解决方法
    基于sharpdevelop核心和ArcEngine打造插件式桌面GIS应用(概述)
    WPF自定义控件踩坑记录,用户自定义控件 绑定后台定义的 命令 依赖项属性 注意事项 静态
    WPF C# 以非独占式读取本地图片
    C#DataGridView控件60招(一)
    用TEXT文件做数据源
    boost智能指针
    linux下安装boost库
    ASP/ASP.NET程序设计电子书专题下载
    Highcharts 点击多选框取消,添加数据上绑定最大,最小值和图例上绑定提示框数据
  • 原文地址:https://www.cnblogs.com/haoliberale/p/8146053.html
Copyright © 2011-2022 走看看