Debugging

Debug and troubleshoot your workflows

Debug your workflows to understand execution flow, identify issues, and optimize performance.

Debug Mode Overview

The workflow debugger lets you:

  • Step through execution node by node
  • Inspect variable values at each step
  • Set breakpoints to pause execution
  • View execution timing and performance
  • Analyze errors and failures

Starting Debug Mode

From the Builder

  1. Open your workflow in the builder
  2. Click Debug in the toolbar
  3. Provide test input data
  4. Click Start Debug

From Execution History

  1. Go to workflow executions list
  2. Click on any execution
  3. Click Replay in Debug Mode

Debug Controls

┌─────────────────────────────────────────────────────────────┐
│  Debug Controls                                              │
├─────────────────────────────────────────────────────────────┤
│  [▶ Continue]  [→ Step Over]  [↓ Step Into]  [■ Stop]       │
│                                                              │
│  Breakpoints: 2 active                    Execution: Paused  │
└─────────────────────────────────────────────────────────────┘

Control Actions

ControlShortcutDescription
ContinueF5Run until next breakpoint
Step OverF10Execute current node, move to next
Step IntoF11Enter sub-workflow or loop
Step OutShift+F11Exit current sub-workflow or loop
StopShift+F5Stop debug session
RestartCtrl+Shift+F5Restart from beginning

Breakpoints

Setting Breakpoints

  1. Click the dot icon on any node's left edge
  2. Red dot indicates active breakpoint
  3. Click again to remove

Breakpoint Types

TypeIconDescription
Standard🔴Always pause
Conditional🟡Pause when condition is true
Log🔵Log message without pausing

Conditional Breakpoints

Right-click a breakpoint to add a condition:

javascript
// Pause only when amount exceeds threshold
{{ input.amount > 1000 }}

// Pause on specific customer
{{ input.customer_id == 'cust_123' }}

// Pause on error condition
{{ nodes.api_call.response.status >= 400 }}

Log Points

Log values without stopping:

javascript
// Log current state
"Processing order {{ input.order_id }} - Amount: {{ input.amount }}"

// Log node output
"API Response: {{ nodes.http_request.response.status }}"

Debug Panel

Variables Tab

View all variables at current execution point:

┌─────────────────────────────────────────────┐
│  Variables                                   │
├─────────────────────────────────────────────┤
│  ▼ input                                    │
│    ├─ customer_id: "cust_abc123"            │
│    ├─ amount: 150.00                        │
│    └─ items: Array(3)                       │
│                                             │
│  ▼ nodes                                    │
│    └─ ▼ http_request_1                      │
│        └─ ▼ response                        │
│            ├─ status: 200                   │
│            └─ body: {...}                   │
│                                             │
│  ▼ variables                                │
│    ├─ order_total: 450.00                   │
│    └─ is_premium: true                      │
└─────────────────────────────────────────────┘

Call Stack Tab

View the execution path:

┌─────────────────────────────────────────────┐
│  Call Stack                                  │
├─────────────────────────────────────────────┤
│  → [Current] Process Order                   │
│    ├─ Webhook Trigger                        │
│    ├─ Validate Input                         │
│    ├─ Get Customer ← paused here            │
│    ├─ Calculate Total (pending)              │
│    └─ Send Confirmation (pending)            │
└─────────────────────────────────────────────┘

Output Tab

View node output and logs:

┌─────────────────────────────────────────────┐
│  Output                                      │
├─────────────────────────────────────────────┤
│  [14:30:01] Webhook received                 │
│  [14:30:01] Input validated successfully     │
│  [14:30:02] GET /api/customers/cust_abc123   │
│  [14:30:02] Response: 200 OK (145ms)         │
│  [14:30:02] ▶ Paused at breakpoint           │
└─────────────────────────────────────────────┘

Performance Tab

View timing information:

┌─────────────────────────────────────────────┐
│  Performance                                 │
├─────────────────────────────────────────────┤
│  Node                    Duration   Status   │
│  ─────────────────────────────────────────  │
│  Webhook Trigger         2ms        ✓        │
│  Validate Input          5ms        ✓        │
│  Get Customer            145ms      ✓        │
│  Calculate Total         -          ◯        │
│  Send Confirmation       -          ◯        │
│  ─────────────────────────────────────────  │
│  Total                   152ms               │
└─────────────────────────────────────────────┘

Test Input

Providing Test Data

json
{
  "customer_id": "cust_abc123",
  "amount": 150.00,
  "items": [
    { "id": "item_1", "name": "Widget", "price": 50.00 }
  ],
  "metadata": {
    "source": "web",
    "campaign": "summer_sale"
  }
}

Input History

Recent test inputs are saved:

  1. Click the clock icon in test input
  2. Select from recent inputs
  3. Or save current input with a name

Input Templates

Create reusable test templates:

json
{
  "name": "Premium Customer Order",
  "input": {
    "customer_id": "cust_premium",
    "customer_tier": "premium",
    "amount": 5000.00
  }
}

Execution History

Viewing Past Executions

  1. Go to Workflows > [Your Workflow] > Executions
  2. Filter by status, date, or trigger type
  3. Click any execution to view details

Execution Details

Each execution shows:

  • Status: success, failed, running, cancelled
  • Duration: Total execution time
  • Trigger: What started the workflow
  • Input: Original input data
  • Output: Final output
  • Nodes: Per-node execution details
  • Errors: Any errors that occurred

Replaying Executions

To debug a past execution:

  1. Open execution details
  2. Click Replay
  3. Optionally modify input
  4. Debug with original context

Error Analysis

Error Details

When a node fails:

┌─────────────────────────────────────────────┐
│  Error in: HTTP Request - Get Customer       │
├─────────────────────────────────────────────┤
│  Type: HTTP Error                            │
│  Status: 404                                 │
│  Message: Customer not found                 │
│                                             │
│  Request:                                    │
│  GET https://api.example.com/customers/123   │
│                                             │
│  Response:                                   │
│  {"error": "Customer not found"}             │
│                                             │
│  Stack Trace:                                │
│  at HTTPExecutor.execute (line 45)           │
│  at WorkflowEngine.runNode (line 123)        │
└─────────────────────────────────────────────┘

Common Error Types

ErrorCauseSolution
TimeoutRequest too slowIncrease timeout or optimize
HTTP 4xxClient errorCheck request parameters
HTTP 5xxServer errorRetry or check service
Parse ErrorInvalid JSONValidate data format
Type ErrorWrong data typeCheck variable types
Reference ErrorMissing variableCheck variable exists

Live Debugging

Watch Expressions

Add expressions to monitor:

javascript
// Watch these values as you step through
input.amount
variables.order_total
nodes.api_call.response.status
input.items.length

Edit and Continue

Modify values during debug:

  1. Pause at a breakpoint
  2. Click edit icon on any variable
  3. Change the value
  4. Continue execution with new value

Hot Reload

Update node configuration while debugging:

  1. Pause execution
  2. Edit node settings
  3. Changes apply immediately
  4. Continue with updated config

Debug Tips

Effective Breakpoint Placement

[Trigger] → [Validate] → 🔴 [API Call] → [Process] → 🔴 [Send]
                          ↑                           ↑
                    Check API response         Verify final output

Debug Strategies

  1. Binary Search: Place breakpoint in middle, narrow down
  2. Data Flow: Follow data from input to output
  3. Error First: Start from failing node, work backwards
  4. Isolation: Test suspicious nodes individually

Performance Debugging

  1. Enable performance tab
  2. Identify slow nodes (>1s)
  3. Check for:
    • Slow API calls
    • Large data processing
    • Unnecessary loops
    • Missing parallelization

Debugging Sub-Workflows

Entering Sub-Workflows

When you hit a sub-workflow node:

  1. Step Over: Execute entire sub-workflow
  2. Step Into: Enter and debug sub-workflow

Sub-Workflow Context

Inside a sub-workflow:

  • Access parent input via {{ parent.input }}
  • View parent variables in Variables panel
  • Return to parent with Step Out

Debugging Loops

Loop Iteration Control

┌─────────────────────────────────────────────┐
│  Loop: Process Items (iteration 3 of 10)    │
├─────────────────────────────────────────────┤
│  [⏮ First] [◀ Prev] [▶ Next] [⏭ Last]     │
│                                             │
│  Current Item:                              │
│  { "id": "item_3", "price": 29.99 }         │
│                                             │
│  Loop Variables:                            │
│  index: 2                                   │
│  is_first: false                            │
│  is_last: false                             │
└─────────────────────────────────────────────┘

Skip to Iteration

Jump to specific iteration:

  1. Click iteration counter
  2. Enter iteration number
  3. Debug continues from that point

Next Steps