By Diego Liascovich
Full-Stack Developer | Microservices | Angular | Node.js
In this post, we’ll explore powerful, professional ways to debug Node.js applications, step by step — and all without relying on console.log.
🧠 Why You Should Ditch console.log
- Clutters code
- Slows performance
- Doesn't pause execution
- Not useful for complex stack traces or state inspection
🔍 1. The debugger Statement
Place debugger; in your Node.js code:
function calculateTotal(items) {
const total = items.reduce((sum, item) => sum + item.price, 0);
debugger; // Execution will pause here
return total;
}
Then run your app with:
node inspect index.js
This opens the built-in debugger in the terminal.
🧪 2. Chrome DevTools + --inspect
Use the V8 inspector in Chrome to debug with a GUI:
Step 1: Add debugger to your code
debugger;
Step 2: Run with --inspect
node --inspect index.js
Step 3: Open Chrome and go to:
chrome://inspect
Click “Open dedicated DevTools for Node” and you’ll see a full debugger just like front-end JS debugging.
🖥️ 3. Debugging with VSCode (Recommended)
VSCode provides the most comfortable experience.
Step 1: Add .vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug My App",
"program": "${workspaceFolder}/index.js"
}
]
}
Step 2: Add breakpoints
Click in the gutter of VSCode next to the lines you want to inspect.
Step 3: Press F5 to start debugging
You’ll get:
- Call stack
- Watches
- Scope
- Live variable inspection
🧭 4. Remote Debugging
Useful when debugging apps running inside Docker or in the cloud.
Run Node.js with:
node --inspect=0.0.0.0:9229 index.js
Then from your local machine:
- Open
chrome://inspect - Add the remote target (IP:9229)
Make sure the port is exposed and secured! Never expose
--inspectin production without IP restriction.
🔁 5. Using ndb: GUI Debugging Made Easy
ndb is a standalone debugger from the Chrome team.
npm install -g ndb
ndb index.js
You’ll get:
- Source-mapped debugging
- Breakpoints
- Heap snapshots
- Console context
🧰 6. Smart Logging with debug
Instead of polluting your app with console.log, use the debug library:
npm install debug
const debug = require('debug')('app:init');
debug('Initializing app...');
Enable output with:
DEBUG=app:* node index.js
You can turn logs on/off per namespace (app:*, db:*, etc.).
🧪 7. Debugging Tests
If you’re testing with Jest, Mocha, or Vitest:
node --inspect-brk ./node_modules/.bin/jest tests/example.spec.js
Or with TypeScript:
node --inspect-brk -r ts-node/register src/index.ts
Then attach Chrome or VSCode.
🧼 Summary: Debug Like a Pro
| Tool | Use Case | GUI | Breakpoints | Live Vars |
|---|---|---|---|---|
inspect |
Built-in debugger | ❌ | ✅ | 🟡 Console only |
| DevTools | Full browser debugger | ✅ | ✅ | ✅ |
| VSCode | IDE-native debugging | ✅ | ✅ | ✅ |
ndb |
Lightweight GUI | ✅ | ✅ | ✅ |
debug |
Clean runtime logging | ❌ | ❌ | ✅ (logs) |
💡 Pro Tips
- Use
debugger;instead ofconsole.logto stop and inspect. - Prefer
debugorwinstonoverconsole.login production. - Always use
.vscode/launch.jsonfor repeatable debugging.
Top comments (0)