科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Linux系统中使用SystemTap调试内核 (3)

Linux系统中使用SystemTap调试内核 (3)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

了解了SystemTap的基本用法,下面让我们来看几个有趣的例子。统计当前系统中调用最多的前10个系统调用,在进行性能分析的时候,我们常常需要知道那些函数调用次数最多,才能有的放矢地展开分析。

作者:www-128.ibm.com 来源:www-128.ibm.com 2007年10月22日

关键字: 内核 调试 SystemTap Linux

  • 评论
  • 分享微博
  • 分享邮件

SystemTap的例子

了解了SystemTap的基本用法,下面让我们来看几个有趣的例子。统计当前系统中调用最多的前10个系统调用,在进行性能分析的时候,我们常常需要知道那些函数调用次数最多,才能有的放矢地展开分析。下面这个简单的例子可以打印出在过去的5秒钟里调用次数最多的那些系统调用。

#!/usr/bin/env stap
#
# display the top 10 syscalls called in last 5 seconds
#
global syscalls
function print_top () {
        cnt=0
        log ("SYSCALL\t\t\t\tCOUNT")
        foreach ([name] in syscalls-) {
                printf("%-20s\t\t%5d\n",name, syscalls[name])
                if (cnt++ == 10)
                        break
        }
        printf("--------------------------------------\n")
        delete syscalls
}
probe syscall.* {
        syscalls[probefunc()]++
}
probe timer.ms(5000) {
        print_top ()
}

它的输出结果一目了然:

看看是谁在偷偷动我的文件

有时候,我们如果中了恶意的病毒软件,会发现某些文件莫名其妙的被修改,下面这个例子可以帮你监视谁在修改你的文件。

#!/usr/bin/env stap
#
# monitor who is messing my file of secrets
#
probe generic.fop.open {
        if(filename == "secrets")
                printf("%s is opening my file: %s\n", execname(), filename)
}

我们运行这个脚本,在另外一个窗口做一些操作,来看看它的输出结果:

打印ANSI字符串

SystemTap不仅仅是一个简单的调试工具,强大的脚本语言能力让它同样能做一些有趣的事情,下面这个例子就可以对输出的字符进行美化:

#!/usr/bin/env stap
#
# print colorful ANSI strings
#
probe begin {
        printf("a \\ b |");
        for (c = 40; c < 48; c++)
                printf("   %d   ", c);
        printf("\12");
        for (l = 0; l < 71; l++)
                printf("-");
        printf("\12");
        for (r = 30; r < 38; r++)
                for (t = 0; t < 2; t++) {
                        printf("%d    |", r);
                        for (c = 40; c < 48; c++)
                           printf("\033[%d;%d%s %s \033[0;0m",
                           r, c, !t ? "m" : ";1m", !t ? "Normal" : "Bold  ");
                        printf("\12");
                }
        exit();
}

来看看它的输出:

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章