- Notifications
You must be signed in to change notification settings - Fork280
Generate, parse, and enhance JavaScript stack traces in all web browsers
License
stacktracejs/stacktrace.js
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Generate, parse and enhance JavaScript stack traces in all browsers
Debug and profile your JavaScript with astack trace of function calls leading to an error (or any condition you specify).
stacktrace.js uses browsers'Error.stack
mechanism to generate stack traces, parses them, enhances them withsource maps and usesPromisesto return an Array ofStackFrames.
Upgrading? Check the0.x -> 1.x Migration Guide
varcallback=function(stackframes){varstringifiedStack=stackframes.map(function(sf){returnsf.toString();}).join('\n');console.log(stringifiedStack);};varerrback=function(err){console.log(err.message);};StackTrace.get().then(callback).catch(errback);//===> Promise(Array[StackFrame], Error)//===> callback([// StackFrame({functionName: 'func1', args: [], fileName: 'file.js', lineNumber: 203, columnNumber: 9}),// StackFrame({functionName: 'func2', args: [], fileName: 'http://localhost:3000/file.min.js', lineNumber: 1, columnNumber: 3284})//])
HEADS UP: This method does not resolve source maps or guess anonymous function names.
StackTrace.getSync();//==> [// StackFrame({functionName: 'func1', args: [], fileName: 'file.js', lineNumber: 203, columnNumber: 9}),// StackFrame({functionName: 'func2', args: [], fileName: 'http://localhost:3000/file.min.js', lineNumber: 1, columnNumber: 3284})//]
Automatically handle errors
window.onerror=function(msg,file,line,col,error){// callback is called with an Array[StackFrame]StackTrace.fromError(error).then(callback).catch(errback);};
varerror=newError('BOOM!');StackTrace.fromError(error).then(callback).catch(errback);//===> Promise(Array[StackFrame], Error)
This might capture arguments information, but isn't supported in ES5 strict-mode
StackTrace.generateArtificially().then(callback).catch(errback);//===> Promise(Array[StackFrame], Error)
// callback is called with an Array[StackFrame] every time wrapped function is calledvarmyFunc=function(arg){return'Hello '+arg;};varmyWrappedFunc=StackTrace.instrument(myFunc,callback,errback);//===> Instrumented FunctionmyWrappedFunc('world');//===> 'Hello world'// Use this if you overwrote you original functionmyFunc=StackTrace.deinstrument(myFunc);//===> De-instrumented Function
npm install stacktrace-jsbower install stacktrace-jscomponent install stacktracejs/stacktrace.jshttp://cdnjs.com/libraries/stacktrace.js
StackTrace.get(/*optional*/ options)
=>Promise(Array[StackFrame])
Generate a backtrace from invocation point, then parse and enhance it.
(Optional) options: Object
- filter: Function(StackFrame => Boolean) - Only include stack entries matching for which
filter
returnstrue
- sourceCache: Object (String URL => String Source) - Pre-populate source cache to avoid network requests
- offline: Boolean (default: false) - Set to
true
to prevent all network requests
StackTrace.getSync(/*optional*/ options)
=> Array[StackFrame]
Generate a backtrace from invocation point, then parse it. This method does not use source maps or guess anonymous functions.
(Optional) options: Object
- filter: Function(StackFrame => Boolean) - Only include stack entries matching for which
filter
returnstrue
StackTrace.fromError(error, /*optional*/ options)
=>Promise(Array[StackFrame])
Given an Error object, useerror-stack-parserto parse it and enhance location information withstacktrace-gps.
error: Error
(Optional) options: Object
- filter: Function(StackFrame => Boolean) - Only include stack entries matching for which
filter
returnstrue
- sourceCache: Object (String URL => String Source) - Pre-populate source cache to avoid network requests
- offline: Boolean (default: false) - Set to
true
to prevent all network requests
StackTrace.generateArtificially(/*optional*/ options)
=>Promise(Array[StackFrame])
Usestack-generator to generate a backtrace by walking thearguments.callee.caller
chain.
(Optional) options: Object
- filter: Function(StackFrame => Boolean) - Only include stack entries matching for which
filter
returnstrue
- sourceCache: Object (String URL => String Source) - Pre-populate source cache to avoid network requests
- offline: Boolean (default: false) - Set to
true
to prevent all network requests
Given a function, wrap it such that invocations trigger a callback that is called with a stack trace.
fn: Function - to wrap, call callback on invocation and call-through
callback: Function - to call with stack trace (generated by
StackTrace.get()
) when fn is called(Optional) errback: Function - to call with Error object if there was a problem getting a stack trace.Fails silently (though
fn
is still called) if a stack trace couldn't be generated.
Given a function that has been instrumented, revert the function to it's original (non-instrumented) state.
- fn: Function - Instrumented Function
StackTrace.report(stackframes, url, message, requestOptions)
=>Promise(String)
Given an an error message and Array of StackFrames, serialize and POST to given URL. Promise is resolved with response text from POST request.
Example JSON POST data:
{ message: 'BOOM', stack: [ {functionName: 'fn', fileName: 'file.js', lineNumber: 32, columnNumber: 1}, {functionName: 'fn2', fileName: 'file.js', lineNumber: 543, columnNumber: 32}, {functionName: 'fn3', fileName: 'file.js', lineNumber: 8, columnNumber: 1} ]}
- stackframes: Array(StackFrame) - Previously wrapped Function
- url: String - URL to POST stack JSON to
- message: String - The error message
- requestOptions: Object - HTTP request options object. Only
headers: {key: val}
is supported.
HEADS UP: You won't get the benefit ofsource mapsin IE9- or other very old browsers.
I recommend thestack-trace node package specifically built for node.It has a very similar API and also supports source maps.
This project adheres to theOpen Code of Conduct. By participating, you are expected to honor this code.
Want to be listed as aContributor? Start with theContributing Guide!
This project is made possible due to the efforts of these fine people:
About
Generate, parse, and enhance JavaScript stack traces in all web browsers
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.