« OpenSolaris 2008.05... | Main | Unix Shell 和Solaris... »
http://developers.sun.com.cn/blog/functionalca/date/20080622 星期日 2008年06月22日

使用Dtrace来侦测Javascript代码

作者:张帆
邮箱: zhangfan555@gmail.com
适用读者:初级中级

 

 
    Web2.0时代Javascript已经成为Web编程的主流语言,下面我们通过一个例子来说明如何采用Dtrace来进行Javascript的程序的探测。
  首先,编写名为
clock.htmlHTML文件,这个程序可以用来显示系统的当前时间。其中包含startTime()padZero()的函数调用。

   采用Solaris系统下的Firefox浏览器,执行这个HTML文件。当页面载入后,Javascript程序会执行startTime()函数。

<HTML>
<HEAD>
<TITLE>Clock, JavaScript</TITLE>
<SCRIPT type="text/javascript">
function padZero(i)
{
        if (i < 10) return "0" + i
        return i
}
 
function startTime()
{
        var now = new Date
        var time = padZero(now.getHours()) + ":" +
            padZero(now.getMinutes()) + ":" +
            padZero(now.getSeconds());
        document.getElementById('clock').innerHTML = "time: " + time + "<br>"
        var timeout = setTimeout('startTime()', 1000)
}
</SCRIPT>
</HEAD>
<BODY onload="startTime()">
<DIV id="clock"></DIV>
</BODY>
</HTML>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 



Dtrace
脚本Js_funccalls.d用监测Javascript语言的函数调用。这个程序采用了Dtrace中的聚合来实现了对一段时间javascript函数调用的统计。这个程序,我会运行9秒,并按Ctrl-C结束脚本。

#!/usr/sbin/dtrace -Zs
/*
 * js_funccalls.d - measure JavaScript function calls using DTrace.
 *                  Written for the Solaris Nevada DTrace JavaScript provider.
 *
 * 12-Sep-2006, ver 0.90
 *
 * USAGE: js_calls.d            # hit Ctrl-C to end
 *
 * FIELDS:
 *              FILE            Filename that contained the function
 *              FUNC            JavaScript function name
 *              CALLS           Function calls during this sample
 */
 
#pragma D option quiet
 
dtrace:::BEGIN
{
        printf("Tracing... Hit Ctrl-C to end.\n");
}
 
javascript*:::function-entry
{
        @funcs[basename(copyinstr(arg0)), copyinstr(arg2)] = count();
}
 
dtrace:::END
{
        printf(" %-32s %-36s %8s\n", "FILE", "FUNC", "CALLS");
        printa(" %-32s %-36s %@8d\n", @funcs);
}

FUNC列出了Javascript的函数, FILE 列出了是哪个Javascript的函数出自哪个HTML.

# ./js_funccalls.d
Tracing... Hit Ctrl-C to end.
^C
 FILE                             FUNC                                    CALLS
 clock.html                       getElementById                              9
 clock.html                       getHours                                    9
 clock.html                       getMinutes                                  9
 clock.html                       getSeconds                                  9
 clock.html                       setTimeout                                  9
 clock.html                       startTime                                   9
 clock.html                       padZero                                    27

 

可以看到clock.html文件中的不同函数的调用都被Dtrace检测出来了。

 

原文链接:http://blogs.sun.com/brendan/entry/dtrace_meets_javascript

其他参考资源:http://developers.sun.com/solaris/articles/dtrace_ajax.html 



发表于 Sun Functional 校园大使 [JDS] ( 六月 22, 2008 02:41 上午 ) Permalink | 评论[0]
评论:

发表一条评论:
  • HTML语法: 禁用