Painless coffeescript traces and debugging with coffee-trace
Coffee-Trace makes spotting javascript stack traces back to coffee-script source code a friendly tasks, and with such style that you might start enjoying when things crashes ( not really ).
Simply install coffee-trace:
npm install coffee-trace
and then require()
it before all your other libraries
require("coffee-trace")
or straight from command line:
coffee -rcoffee-trace my-program.coffee
Example
Running this..
require('coffee-trace')
test = ->
people =
john:
first_name: 'john'
last_name: 'doe'
mary:
first_name: 'mary'
last_name: 'jane'
console.log("Welcome", people[p].first_name, people[p].last_name, "!!!") for p in ['john', 'mary', 'josh']
process.nextTick test
will result in this:
Written by Rilke Petrosky (XenoMuta 2.0)
Related protips
3 Responses
This sounds useful. However since it needs to be the very first require, it can't be a conditional inside my code after already checking for the env value, which I use nconf for. And then, -rcoffee-trace isn't recognized by coffeescript (using coffeescript 1.4.0). I think you meant coffee -r ./node_modules/coffee-trace
in a typical installation, and certainly not -rcoffeescript as one word. But even when using the later to run my app, it doesn't work.
Works for the sample you provide, but not for other exceptions. They show very uncaffeinated. E.g. I get stuff like:
Error: listen EACCES
at errnoException (net.js:901:11)
at Server._listen2 (net.js:1020:19)
at listen (net.js:1061:10)
at Server.listen (net.js:1127:5)
at Object.<anonymous> (/home/matan/ingi/repos/front-end/app.coffee:100:10)
at Object.<anonymous> (/home/matan/ingi/repos/front-end/app.coffee:112:4)
at Module._compile (module.js:456:26)
at Object.exports.run (/usr/lib/coffee-script/lib/coffee-script/coffee-script.js:83:25)
at compileScript (/usr/lib/coffee-script/lib/coffee-script/command.js:177:29)
at /usr/lib/coffee-script/lib/coffee-script/command.js:152:18
Maybe it's related to coffee-trace's async initialization and instrumentation?
Its exactly what you suspect. It is initialized in an async fashion. You could write a wrapper for your program which requires coffee-trace and then, in the next loop carries on with your app with require ( with nextTick() maybe ).
Radical changes in the way coffee-trace works are planned for a rewrite, however, it may no longer be as necessary as before, because there has being a lot of progress with sourcemaps and later versions of coffee-script match lines correctly most of times.
Always use the latest version of coffee-script and coffee-trace as well.
Mmmm thanks, much appreciated :)
So then the advice for using -r should be taken with a grain of salt shouldn't it? I didn't notice I was working with an old version until I checked now. WIth the latest CoffeeScript 1.6.3 stack traces are a bit more verbose, but are still clean of any CoffeeScript line references.... only pure javascript ones. So I'm not entirely sure what you meant in 'may no longer be as necessary as before` there......