⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 colortrace.d

📁 solaris操作系统中的一个dtrace源码
💻 D
字号:
#!/usr/sbin/dtrace -s
/*
* colortrace.d - Trace function, syscall and kernel events, in color.
*                Written for DTrace (Solaris 10 3/05).
*
* 26-Jan-2005, ver 1.00
*
* USAGE:       colortrace.d -p PID
*
* This script demonstrates some key DTrace features: the capability
* to observe function calls across the entire software stack, and
* to measure timestamps for any event. colortrace.d shows the function
* flow of a process, along with delta times between lines of output.
*
* NOTES: Run this on something small, such as a shell. If you are on
* a multi-CPU server, pbind the process to a single CPU else the output
* may by shuffled.
*/

#pragma D option quiet
#pragma D option switchrate=10

/* see "man -s5 dtterm" for a color list */
inline string RED       = "\033[31;1m";
inline string BLUE      = "\033[34;1m";
inline string GREEN     = "\033[32;1m";
inline string VIOLET    = "\033[35;1m";
inline string OFF       = "\033[0m";

dtrace:::BEGIN
{
        last = timestamp;
        printf("%-12s %16s    %s\n", "DELTA(ns)", "TYPE", "FUNCTION");
}

syscall:::entry
/pid == $target/
{
        depth++;
        printf("%-12d %16s %s%*s -> %s%s\n", timestamp - last, probeprov,
            VIOLET, depth, " ", probefunc, OFF);
        self->insyscall = 1;
        last = timestamp;
}

syscall:::return
/pid == $target/
{
        printf("%-12d %16s %s%*s <- %s%s\n", timestamp - last, probeprov,
            VIOLET, depth, " ", probefunc, OFF);
        depth = depth > 0 ? --depth : 0;
        self->insyscall = 0;
        last = timestamp;
}

fbt:::entry
/self->insyscall/
{
        depth++;
        printf("%-12d %16s %s%*s -> %s%s\n", timestamp - last, "kernel",
            RED, depth, " ", probefunc, OFF);
        last = timestamp;
}

fbt:::return
/self->insyscall/
{
        printf("%-12d %16s %s%*s <- %s%s\n", timestamp - last, "kernel",
            RED, depth, " ", probefunc, OFF);
        depth = depth > 0 ? --depth : 0;
        last = timestamp;
}

pid$target:a.out::entry
{
        depth++;
        printf("%-12d %16s %s%*s -> %s%s\n", timestamp - last, probemod,
            BLUE, depth, " ", probefunc, OFF);
        last = timestamp;
}

pid$target:a.out::return
{
        printf("%-12d %16s %s%*s <- %s%s\n", timestamp - last, probemod,
            BLUE, depth, " ", probefunc, OFF);
        depth = depth > 0 ? --depth : 0;
        last = timestamp;
}

pid$target:lib*::entry
{
        depth++;
        printf("%-12d %16s %s%*s -> %s%s\n", timestamp - last, probemod,
            GREEN, depth, " ", probefunc, OFF);
        last = timestamp;
}

pid$target:lib*::return
{
        printf("%-12d %16s %s%*s <- %s%s\n", timestamp - last, probemod,
            GREEN, depth, " ", probefunc, OFF);
        depth = depth > 0 ? --depth : 0;
        last = timestamp;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -