Skip to content

Instantly share code, notes, and snippets.

@DinisCruz
Last active August 29, 2015 14:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DinisCruz/d8d79b7cf20002fbac09 to your computer and use it in GitHub Desktop.
Save DinisCruz/d8d79b7cf20002fbac09 to your computer and use it in GitHub Desktop.
How to access stack trace values and parameters
console.log('--------------------------')
Object.defineProperty global, '__stack', {
get: ()->
orig = Error.prepareStackTrace;
Error.prepareStackTrace = (_, stack)-> return stack;
err = new Error;
Error.captureStackTrace(err, arguments.callee);
stack = err.stack;
Error.prepareStackTrace = orig;
return stack;
}
Object.defineProperty global, '__line', {
get: ()->
return __stack[0].getLineNumber()
}
require('fluentnode')
methodBBBBB = (BBBBB)->
#console.log arguments.callee.arguments.callee.arguments
for frame in __stack
log frame.getFunctionName() + " - " + frame.getFileName() + " : " + frame.getLineNumber() #+ frame.fun.arguments.json_inspect()
log __stack.length
log __stack[2].fun.arguments
log __stack[0].getFunctionName()
#console.log(Object.keys(__stack[0].receiver))
#console.log(__line);
#console.trace('a')
methodAAAA = (VVVVVV)->
methodBBBBB('cccccc')
methodAAAA('BBBBBBBBBBBB')
if module.filename.match /\.(lit)?coffee$/ # DIY source map support
require('source-map-support').install
retrieveSourceMap: require './retrieve_source_map'
else
require('source-map-support').install() # Assume source maps have already been compiled
# Rest of your main file here
require('fluentnode')
Object.defineProperty global, '__stack', {
get: ()->
orig = Error.prepareStackTrace;
Error.prepareStackTrace = (_, stack)-> return stack;
err = new Error
Error.captureStackTrace(err, arguments.callee);
stack = err.stack;
Error.prepareStackTrace = orig;
return stack;
}
global.printStack = (size)=>
size ?= 3
for frame in __stack.take(size)
filename = frame.getFileName()
lineNumber = frame.getLineNumber() # log frame.getFunctionName() + " - " + filename + " : " + lineNumber #+ frame.fun.arguments.json_inspect()
codeline = filename.file_Contents().split('\n')
log '-----: ' + lineNumber
log codeline[lineNumber-2] + '\n' + codeline[lineNumber-1] + '\n' + codeline[lineNumber]
methodBBBBB = (BBBBB)->
printStack()
#console.log arguments.callee.arguments.callee.arguments
#log __stack.length
#log __stack[2].fun.arguments
#log __stack[0].getFunctionName()
#console.log(Object.keys(__stack[0].receiver))
#console.log(__line);
#console.trace('a')
#methodAAAA = (VVVVVV)->
methodBBBBB('cccccc')
#methodAAAA('BBBBBBBBBBBB')
#console.log module.filename
# was called : retrieve_source_map.coffee
coffee = require 'coffee-script'
fs = require 'fs'
cachedSourceMaps = {}
generateSourceMap = (path) ->
return unless path.match /\.(lit)?coffee$/
try
code = fs.readFileSync(path, 'utf8')
options =
filename: path
sourceMap: true
header: false
{js, v3SourceMap} = coffee.compile code, options
v3SourceMap = JSON.parse v3SourceMap
v3SourceMap.file = path
v3SourceMap.sourceRoot = ""
v3SourceMap.sources = [path]
v3SourceMap = JSON.stringify v3SourceMap
cachedSourceMaps[path] = {map: v3SourceMap}
catch e
cachedSourceMaps[path] = null # Prevent recursion
console.error "Error occurred generating sourcemap"
console.error e?.stack
return cachedSourceMaps[path]
module.exports = (path) ->
if typeof cachedSourceMaps[path] isnt 'undefined'
return cachedSourceMaps[path]
else
return generateSourceMap(path)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment