JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 3398588
  • Score
    100M100P100Q190565F

Framework-agnostic, micro-library for getting stack traces in all environments

Package Exports

  • stacktrace-js
  • stacktrace-js/stacktrace.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (stacktrace-js) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

What is stacktrace.js?

A Javascript tool that allows you to debug your JavaScript by giving you a stack trace of function calls leading to an error (or any condition you specify)

How do I use stacktrace.js?

Just include stacktrace.js file on your page, and call it like so:

<script type="text/javascript" src="path/to/stacktrace.js" />
<script type="text/javascript">
    ... your code ...
    if (errorCondition) {
         var trace = printStackTrace();
         //Output however you want!
         alert(trace.join('\n\n'));
    }
    ... more code of yours ...
</script>

Bookmarklet available on the project home page.

You can also pass in your own Error to get a stacktrace not available in IE or Safari 5-

var lastError;
try {
    // error producing code
} catch(e) {
   lastError = e;
   // do something else with error
}

// Returns stacktrace from lastError!
printStackTrace({e: lastError});

Function Instrumentation

You can now have any (public or privileged) function give you a stacktrace when it is called:

var p = new printStackTrace.implementation();
p.instrumentFunction(this, 'baz', logStackTrace);
function logStackTrace(stack) {
    console.log(stack.join('\n'));
}
function foo() {
    var a = 1;
    bar();
}
function bar() {
    baz();
}
foo(); //Will log a stacktrace when 'baz()' is called containing 'foo()'!

p.deinstrumentFunction(this, 'baz'); //Remove function instrumentation

What browsers does stacktrace.js support?

It is currently tested and working on:

  • Firefox (and Iceweasel) 0.9+
  • Google Chrome 1+
  • Safari 3.0+
  • Opera 7+
  • IE 5.5+
  • Konqueror 3.5+
  • Flock 1.0+
  • SeaMonkey 1.0+
  • K-Meleon 1.5.3+
  • Epiphany 2.28.0+
  • Iceape 1.1+

Contributions

This project is made possible due to the efforts of these fine people:

Making contributions

When submitting your pull requests, please do the following to make it easier to incorporate your changes:

  • Include unit and/or functional tests that validate changes you're making.
  • Run unit tests in the latest IE, Firefox, Chrome, Safari and Opera and make sure they pass.
  • Rebase your changes onto origin/HEAD if you can do so cleanly.
  • If submitting additional functionality, provide an example of how to use it.
  • Please keep code style consistent with surrounding code.

Testing

There are a few ways to run tests:

  • You can run tests in PhantomJS by simply running gradlew test from your favorite shell.
  • Run tests with JSTestDriver using gradlew jstd
  • Point any browser to ≤project dir>/test/TestStacktrace.html for unit tests
  • Point your browser to ≤project dir>/test/functional/index.html for more real-world functional tests