使用Dtrace来侦测Javascript代码
作者:张帆
邮箱: zhangfan555@gmail.com
适用读者:初级中级
Web2.0时代Javascript已经成为Web编程的主流语言,下面我们通过一个例子来说明如何采用Dtrace来进行Javascript的程序的探测。
首先,编写名为clock.html的HTML文件,这个程序可以用来显示系统的当前时间。其中包含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 quietdtrace:::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.dTracing... 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]
评论:
