Im evaluating the Geddy MVC framework for node.js
and I am seeing a strange issue - none of my breakpoints get hit when debugging.
I am using WebStorm to launch node.js
in debug mode.
I dont know how to make Geddy start in debug mode using the CLI command so I have a bootstrapper file that I use that looks like this:
console.log("Starting server...")
var geddy = require("geddy/bin/cli")
console.log("Server started.")
I set a breakpoint on all three lines and only the last console.log
gets hit, so at least I know that the breakpoints and debugging is working properly.
Geddy internally require()
's my controllers who also have breakpoints set in several locations. These never get hit, but the controllers do work properly and the HTTP requests are served properly as well.
Is there any reason why breakpoints will not be hit in Geddy? Is there something more I can do?
There's a Debugging WikiPage with some information about how to debug geddy.
I have been unable to verify this, but I believe the issue is due to the fact that cluster
spawns new processes but the debugger is unaware of them. I have not found a way to attach the debugger to the new processes, and im not even sure if they can be started with the debugging port open.
Geddy uses cluster
so it inherits this issue.
This thread mentions a possible solution:
( How do I enable --debug for node.js when running GeddyJS ) but this did not help me.
Geddy doesn't currently support debugging, but we'd love to add that as a feature.
To answer the question specifically for Jetbrains WebStorm or IntelliJ (with the Node.js plugin) debugging:
In short, set up your app as if you were going to deploy on Heroku or Nodejitsu.
package.json
{
"name": "geddy_todo",
"version": "0.0.1",
"dependencies": {
"geddy": "0.6.x"
},
"engines": {
"node": "0.8.x",
"npm": "1.1.x"
}
}
Next you have two options
Option 1. Create an app.js that runs geddy.
app.js
var geddy = require('geddy');
geddy.start({
environment: process.env.GEDDY_ENVIRONMENT || 'production'
});
In WebStorm/IntelliJ, in your Run/Debug Configuration for the Node.js app be sure to add an the environment variable GEDDY_ENVIRONMENT and set it to 'development' or 'test' if you want to run your tests.
Option 2 Invoke the geddy client directly
@MiguelMadero mentioned this idea in the comments. Set you WS/IJ to run the following
path/to/geddy/bin/cli.js