Linux调试合集(宏,gdb,gprof)

一  linux内置宏

1        __TIME__          显示当前时间        类型%s

2        __FILE__           显示当前文件        类型%s

3        __DATE__         显示当前日期         类型%s

4        __LINE__           显示当前行数        类型%d

5        __FUNCTION__ 显示当前函数        类型%s

注:“__”是两个下划线

示例代码 demo2.c

#include <stdio.h>

int main(int argc,char **argv)
{
        printf("time = %s\n",__TIME__);
        printf("file = %s\n",__FILE__);
        printf("date = %s\n",__DATE__);
        printf("line = %d\n",__LINE__);
        printf("func = %s\n",__FUNCTION__);

        return 0;
}

 结果

 

二 gdb调试

     gdb调试步骤:

     1,先把文件编译为可执行文件(如对test.c进行编译:gcc -g -o demo demo2.c);

     2,在终端输入gdb 后回车

     3,接着输入file test 后回车,之后进入调试过程

     4,调试过程,根据需要可对代码进行查看或操作

     gdb基本指令:

  1. l 显示源代码

  2. b 设置断点

  3. i 查看信息,如i b查看设置的断点信息

  4. n 执行下条语句

  5. r 运行程序

  6. p 打印变量值,如p sum 打印变量sum的值

  7. q 退出gdb调试

示例代码        demo2.c 

#include <stdio.h>

int main(int argc,char **argv)
{
        printf("time = %s\n",__TIME__);
        printf("file = %s\n",__FILE__);
        printf("date = %s\n",__DATE__);
        printf("line = %d\n",__LINE__);
        printf("func = %s\n",__FUNCTION__);

        return 0;
}

gcc -g -o test2 demo2.c

gdb

file test2

l

b 6

r

n

q

 

 

三 代码剖析

编译的时候加入-pg选项

gcc -pg  demo2.c -o test2

di@ubuntu: ./test2

di@ubuntu: ls

di@ubuntu: test2   gmon.out

gprof test2

 注:

其中主要的信息有两个,一个是每个函数执行的时间占程序总时间的百分比,另外一个就是函数被调用的次数。通过这些信息,可以优化核心程序的实现方式来提高效率。

当然这个剖析程序由于它自身特性有一些限制,比较适用于运行时间比较长的程序,因为统计的时间是基于间隔计数这种机制,所以还需要考虑函数执行的相对时间,如果程序执行时间过短,那得到的信息是没有任何参考意义的。

在使用gprof工具的时候,对于一个函数进行gprof方式的剖析,实质上的时间是指除去库函数调用和系统调用之外,纯碎应用部分开发的实际代码运行的时间,也就是说time一项描述的时间值不包括库函数printf、系统调用system等运行的时间。这些实用库函数的程序虽然运行的时候将比最初的程序实用更多的时间,但是对于剖析函数来说并没有影响。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值