Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

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,

	http://www.opensolaris.org/os/project/mozilla-dtrace/

   A rough guide for the process is,

	1. Download the Mozilla source
		http://developer.mozilla.org/en/docs/Mozilla_Source_Code_Via_CVS
	2. Download the Mozilla DTrace framework patch, and apply
		https://bugzilla.mozilla.org/show_bug.cgi?id=370906
	3. Download the JavaScript DTrace provider patch, and apply
		https://bugzilla.mozilla.org/show_bug.cgi?id=388564
	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)
	};