zoukankan      html  css  js  c++  java
  • 使用 GCC 调试程序

    系统 Ubuntu

    调试示例:

    #include <stdio.h>
    
    int func(int n)
    {
    int sum=0,i;
    for(i=0;i<n;i++)
    {
    sum+=i;
    }
    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));
    }

    编译生成执行文件:

    gcc -g tst.c -o tst 

    -g :生成调试信息,将调试信息加载到可执行文件中

    -o tst : 确定输出文件的名称为 tst ,默认为 a.out , 不可与源文件重名

    打断点:

    b n             // b 代表break , n 代表行号。在某一行打断点

    b function   // function 函数,在某个函数处打断点

    info b         // 打印断点信息

    运行程序:

    r    // run 

    以上程序停在了断电处

    打印变量值:

    p  i      // 打印变量 i 的值

    查看函数堆栈:

    bt   // 

    清除程序断点:

    d    // 清除程序断点 delete

    单步跟踪:

    s  // 运行一行程序,且能够进入函数

    n  // 运行一行程序,且不能进入函数

    显示源程序:

    list n  // 显示第n行周围的源程序

    list function  // 显示函数名为 function 的函数的源程序

    list  // 显示当前行后面的源程序

    list  -   // 显示当前行前面的源程序

    查看源代码内存:

    info line  // 查看源代码在内存中的地址;后面跟 行号 、 函数名 、 文件名:行号 、 文件名:函数名

    disassemble (disass)  // 查看源程序当前执行时的机器码

    查看内存:

    exmaine (x)  // 查看内存中地址的值

    x/<n/f/u> <addr>
      n、f、u 是可选的参数。
      n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。
      f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令
      地址,那么格式可以是i。
      u 表示从当前地址往后请求的字节数,如果不指定的话,GDB 默认是4
      个bytes。u 参数可以用下面的字符来代替,b 表示单字节,h 表示双
      字节,w 表示四字节,g 表示八字节。当我们指定了字节长度后,
      GDB 会从指内存定的内存地址开始,读写指定字节,并把其当作一
      个值取出来。
      <addr>表示一个内存地址。

    查看寄存器:

    info r (registers)  // 查看寄存器的情况(除了浮点寄存器)

  • 相关阅读:
    Mina之session
    GNU C 、ANSI C、标准C、标准c++区别和联系
    SOCKET CLOSE_WAIT 搜集
    [转]二维数组和二级指针的传递问题
    Linux下C语言线程池的实现(1)
    MINA2 之日志配置
    mina里的死锁检测
    MINA2中的拆包组包的处理及一些方法
    void及void指针含义的深刻解析
    JS轻松实现单击文本框弹出选择日期
  • 原文地址:https://www.cnblogs.com/tf-Y/p/4924444.html
Copyright © 2011-2022 走看看