# Debugging basics

> Debug a workflow on the canvas: start a debug run, read the results, find failures, and test parts of a workflow with mocks.

Debugging happens on the same canvas where a workflow is built. There is no separate debug view: a debug run starts from the canvas, the panel below the canvas shows the results, and changes are made on the canvas when an issue appears.

## Starting a debug session

**Run Debug** (▶) in the bottom toolbar of the canvas starts a debug run, in every tool. If the trigger has inputs, a dialog asks for their values. In Studio Web, **Debug** at the top left of the toolbar does the same. A panel appears below the canvas, and the execution trace fills in as each node runs.

**Stop debug** ends the run explicitly, and any change to the workflow also ends it. [The Flow canvas](flow-canvas.md) describes the debug controls and the panel below the canvas in full.

## Reading the results

The **Executions** tab below the canvas has three parts, each answering a different question:

- Debug runs: the list of runs, with the name, duration, and age of each.
- Execution trace: every node that ran, in order, with timing and a success or failure indicator. Selecting a node in the trace highlights it on the canvas, and hovering over a node shows when it started and ended.
- Details: for a run, the **Variables**, **Incidents**, and **Metadata** tabs. For a node, the inputs it received and the outputs it produced.

![The execution panel after a completed debug run: the Debug runs list with the latest run selected, the execution trace listing each node with its duration, and the run details with the Variables, Incidents, and Metadata tabs.](https://dev-assets.cms.uipath.com/assets/images/maestro-automate/11-completed-run-automate-5f9efe29.webp)

The **Incidents** tab lists the errors of the run, grouped by node. Each incident names the node that failed and includes the error message. An unexpected stop is best checked there first.

The **Variables** tab shows runtime variable values in three sections: **Inputs** (values passed into the workflow), **Outputs** (values it produced), and **Variables** (internal workflow variables). Selecting a node in the trace shows the state at that point. A **Filter variables** field searches the values by name.

## Identifying failures

After a debug run, each node on the canvas shows a success or failure indicator. The failed node is also marked in the execution trace, and the **Incidents** tab shows the error message.

![A failed debug run: the Get tickets node is marked in red on the canvas and in the execution trace, and the Incidents tab lists one incident with the message Name or service not known, its code, and the expanded technical details.](https://dev-assets.cms.uipath.com/assets/images/maestro-automate/12-debugging-failed-automate-48b371bd.webp)

The error object includes a `message` field (human-readable description) and a `detail` field (technical cause). The `message` field contains the user-facing failure summary, so it is the place to start.

## Using mock nodes

A static mock tests part of a workflow in isolation. A node with a static mock doesn't run, and passes the mocked data to the nodes after it. This is useful when an earlier node is slow, needs credentials that are not available locally, or depends on external systems. The node's expanded view, which opens by double-clicking the node, has a mode menu in the **Output** column. **Static mock** replaces the real response with data that the nodes after it expect, and **Generated** has an LLM produce the response. [Output mocking](output-mocking.md) describes both.

Mocking multiple nodes at once lets the debug run focus on a specific section of the workflow.

## Tips

- Execution trace first, incidents second: the trace shows the whole run, and the incidents show only what broke.
- Variable values reveal data mismatches: compare the data a node received with the data the next node expected.
- Mocking external dependencies enables faster iteration: mocking a node that calls an API or triggers an RPA process lets the logic be debugged without waiting on external systems.
- Small iterations are faster: one fix per debug cycle is more efficient than trying to fix everything in one pass.
- Descriptive node names improve trace readability: the trace and the incidents reference node names, and names that describe what a node does make traces easier to scan.

## Next steps
- [The Flow canvas](flow-canvas.md): the debug controls and the panel below the canvas.
- [Error handling](error-handling.md): configuring error branches on nodes.
- [Variables and data flow](variables-and-data-flow.md): how variables work across nodes.
- [Community](community.md): ask questions and share workflows with other builders on the UiPath Forum.
