JavaScript - DTracing JavaScript
There scripts trace the JavaScript programming language, and require a
browser to be built with the DTrace JavaScript provider.
The DTrace JavaScript provider was originally written by Brendan Gregg,
and later developed as part of a Mozilla DTrace provider suite by
engineers from both Sun and Mozilla. It currently exists as patches
to the Mozilla source tree and requires building from source to get
working; it may be integrated into Solaris builds by default in the
future. To download the current patches and instructions, visit,
A rough guide for the process is,
1. Download the Mozilla source
2. Download the Mozilla DTrace framework patch, and apply
3. Download the JavaScript DTrace provider patch, and apply
4. Create a .mozconfig file (needed for compilation).
5. Setup various compilation environment vars (CC/CFLAGS/CXX/...)
6. autoconf
7. ./configure --enable-dtrace
8. gmake
See John Rice's instructions linked from the OpenSolaris page above
for details on steps 4-8.
Since the DTrace JavaScript provider may be developed further, there is a
chance that it has changed slightly by the time you are reading this,
causing these scripts to either break or behave oddly. Firstly, check for
newer versions of the DTraceToolkit; if it hasn't been updated and you need
to use these scripts immediately, then updating them shouldn't take
too long. The following was the state of the provider when these scripts
were written - check for changes and update the scripts accordingly,
provider javascript {
probe function-entry(file, class, func)
probe function-info(file, class, func, lineno, runfile, runlineno)
probe function-args(file, class, func, argc, argv, argv0, argv1,
argv2, argv3, argv4)
probe function-rval(file, class, func, lineno, rval, rval0)
probe function-return(file, class, func)
probe object-create-start(file, class)
probe object-create(file, class, *object, rlineno)
probe object-create-done(file, class)
probe object-finalize(NULL, class, *object)
probe execute-start(file, lineno)
probe execute-done(file, lineno)
};