Remote debugging in Heroku

Aug 8, 2024

Remote debugging in Heroku

Discover how to easily set up remote debugging for your Node.js app on Heroku, and diagnose issues like a pro with our step-by-step guide!

Author

Shivam Pundir
Shivam PundirSenior Software Engineer - II

Hey there, fellow coder! Have you ever wished you could just step through your Node.js app running on Heroku like a local app? Well, grab your favorite drink and get comfy because we’re about to embark on a fun journey to set up remote debugging on Heroku!

Why Remote Debugging?

Debugging is a crucial part of development, ensuring your app runs smoothly and efficiently. Remote debugging is especially important when your app is deployed on a server, allowing you to diagnose issues that only appear in a deployed environment.

Prerequisites

Before we jump in, make sure you have:

  • A Node.js application deployed on Heroku.
  • The Heroku CLI installed on your machine.

Debugging Steps

Step 1: Enable Remote Debugging

First, we need to enable remote debugging for your Node.js app. Heroku uses the inspect flag to allow remote debugging.

  1. Modify Your Procfile: Add the --inspect flag to your Procfile. It should look something like this:
web: node –inspect index.js

2. Deploy Changes to Heroku: Commit your changes and push to Heroku:

git add Procfile
git commit -m “Enable remote debugging”
git push heroku master

Step 2: Open a Remote Debugging Session

Now that your app is configured, it’s time to connect to the remote debugger.

  1. Restart Your Heroku App: Restarting ensures the inspect flag is applied:
heroku restart

2. Forward Debugging Port: Forward traffic on a local port to a port inside a dyno; in this case both the local port and dyno port are 9229:

heroku ps:forward 9229

Step 3: Connect Your Debugger

With the SSH tunnel set up, you can now connect your favourite debugger. 

Using VS Code

  1. Open VS Code: Launch VS Code and open your project.
  2. Configure Debugger: Add a new configuration in your launch.json:
{
   "version": "0.2.0",
   "configurations": [{
       "address": "localhost",
       "localRoot": "${workspaceFolder}",
       "name": "Attach to Remote",
       "port": 9090,
       "remoteRoot": "/app",
       "request": "attach",
       "skipFiles": ["<node_internals>/**"],
       "type": "node",
   }]
}

3. Start Debugging: Select the "Attach to Heroku" configuration and start debugging. Set breakpoints, inspect variables, and step through your code like in a local environment.

Using IntelliJ IDEA / Webstorm

  1. Open Run Config: Open your IDE and go to Run > Edit Configurations. 
  2. Configure Debugger: Click the + button and select Attach to Node.js/Chrome:

3. Start Debugging: Select your newly created Node.js Remote Debug configuration, Click the debug icon and start debugging. Set breakpoints, inspect variables, and step through your code like in a local environment.

And there you have it! You’ve just set up remote debugging for your Node.js app on Heroku. High five!  Debugging in the cloud just became a whole lot cooler, right? If you hit any bumps along the way, double-check your SSH tunnel and configurations. Happy debugging!

Subscribe to Our Newsletter

More from the engineering frontline.

Dive deep into our research and insights on design, development, and the impact of various trends to businesses.
Insight
What a PHP-to-NestJS Banking Migration Taught Us About Architecture, Security, and Trust
Sep 8, 2026

What a PHP-to-NestJS Banking Migration Taught Us About Architecture, Security, and Trust

This blog explores the architecture, security, performance, and documentation lessons from migrating a legacy PHP/Laravel banking platform to NestJS.

Insight
Building Production-Grade Video Thumbnail Scrubbing in the Browser: HLS, Frame Extraction, Caching, and Performance Trade-offs
Sep 7, 2026

Building Production-Grade Video Thumbnail Scrubbing in the Browser: HLS, Frame Extraction, Caching, and Performance Trade-offs

This blog explains how to build responsive video thumbnail scrubbing in the browser for local files and HLS streams, covering frame extraction, caching, and performance trade-offs.

Insight
The Agent Can See Your App. How Often Can It Look?
Sep 4, 2026

The Agent Can See Your App. How Often Can It Look?

AI coding agents can now interact with mobile apps, but their effectiveness depends on iteration speed. This blog explores how React Native architecture influences feedback loops and AI-driven developer productivity.

Insight
Building Interactive Cards from Design JSON Without Killing Your Feed: Overlays, Video, Mute/Unmute, and Lag-Free Lists
Sep 1, 2026

Building Interactive Cards from Design JSON Without Killing Your Feed: Overlays, Video, Mute/Unmute, and Lag-Free Lists

Learn how to turn design JSON into interactive, video-enabled cards using overlays, smart media controls, caching, and virtualization without slowing down high-cardinality feeds.

Insight
The Bug That Doesn't Show Up in Code Review: Why Your Flutter Web App Reloads on Safari
Aug 19, 2026

The Bug That Doesn't Show Up in Code Review: Why Your Flutter Web App Reloads on Safari

A real-world look at how oversized images can trigger Safari reloads and iOS crashes in Flutter apps and how smarter image decoding prevents them.

Insight
From Prompting to Process: What Changed When Flutter Shipped Agent Skills
Aug 19, 2026

From Prompting to Process: What Changed When Flutter Shipped Agent Skills

This blog explores how Flutter Agent Skills improve AI-assisted development by combining official framework workflows with project-specific guidance for more consistent development.

Insight
Why Everything Your AI Builds Looks the Same
Aug 19, 2026

Why Everything Your AI Builds Looks the Same

This blog explores why AI-generated interfaces often look alike and explains how design systems, product context, and reusable engineering practices help teams build distinctive, scalable

The Right Conversation Can

Save You Six Months.

Book a call