美文网首页
GDB 详解

GDB 详解

作者: cb_guo | 来源:发表于2019-03-22 11:23 被阅读0次

    gdb 调试利器

    GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c++程序员,gdb是必不可少的工具

    测试代码

    #include <stdio.h>
    int nGlobalVar = 0;
    
    int tempFunction(int a, int b){
        printf("\n tempFunction is called, a = %d, b = %d \n", a, b);
        return (a + b);
    }
    
    int main(){
        int n;
        n = 1;
        n++;
        n--;
    
        nGlobalVar += 100;
        nGlobalVar -= 12;
    
        printf("\n n = %d, nGlobalVar = %d \n", n, nGlobalVar);
    
        n = tempFunction(1, 2);
        printf("\n n = %d\n", n);
        return 0;
    }
    

    常用基本命令

    • r
      Run的简写,运行被调试的程序。
      如果此前没有下过断点,则执行完整个程序;如果有断点,则程序暂停在第一个可用断点处。
    • c
      Continue的简写,继续执行被调试程序,直至下一个断点或程序结束
    • b 行号 | b 函数名
      b: Breakpoint的简写,设置断点。两可以使用“行号”“函数名称”“执行地址”等方式指定断点位置。
    • d 编号
      d: Delete breakpoint的简写,删除指定编号的某个断点,或删除所有断点。断点编号从1开始递增。
    • s | n
      s: 执行一行源程序代码,如果此行代码中有函数调用,则进入该函数;
      n: 执行一行源程序代码,此行代码中的函数调用也一并执行。 s 相当于其它调试器中的“Step Into (单步跟踪进入)”;
      n 相当于其它调试器中的“Step Over (单步跟踪)”。 这两个命令必须在有源代码调试信息的情况下才可以使用(GCC编译时使用“-g”参数)。
    • p 变量名
      Print的简写,显示指定变量(临时变量或全局变量)的值。
    • q
      Quit的简写,退出GDB调试环境。
    • bt | where
      显示栈信息

    启动gbd

    对C/C++程序的调试,需要在编译前就加上-g选项:

    g++ -g hello.cpp -o hello
    

    加载可执行文件

    file hello
    

    开始测试命令

    • r 当没有设置断点时,运行 r 直接执行完
    • 设置断点 分别在两个函数入口设置断点
    • 如果有断点,则程序暂停在第一个可用断点处。
    • c 继续执行被调试程序,直至下一个断点或程序结束
    • 查看栈 (腾讯暑期面试问到了,注意啊)
    • 查看变量数值
    • q 退出GDB调试环境。

    参考

    相关文章

      网友评论

          本文标题:GDB 详解

          本文链接:https://www.haomeiwen.com/subject/rellvqtx.html