Debugging Mule Applications | MuleSoft Documentation
# Debugging Mule Applications
Cloud IDE 
Desktop IDE 
**Open Beta Release** : The **cloud IDE is in open beta**. Any use of Anypoint Code Builder in its beta state is subject to the applicable beta services terms and conditions, available from the IDE.
Debug your Mule application using the embedded debugger in Anypoint Code Builder.
The process for debugging a Mule app is:
  1. Set breakpoints to pause the execution of a flow at lines that you want to inspect or fix.
Breakpoints are markers that you add on line numbers in a configuration XML file for a Mule application that you are developing.
  2. Run the application in debug mode.
  3. Start execution of a flow in your Mule application.
For example, trigger an HTTP Listener or configure a Scheduler component.
  4. When the execution stops at a breakpoint, use the debug toolbar to navigate, inspect, and fix issues.
  5. After addressing an issue at a breakpoint, redeploy (hot deploy) the running instance of your application.
  6. Execute your flow again, and continue debugging until you address all issues.
  7. Stop the debug session.


## Before You Begin
  * Set up and access the web or desktop IDE.
  * Create an integration.


## Debug Console Overview
**Start Debugging** : Starts an instance of a Mule application in debugging mode.  
---  
**Debug Toolbar** : Controls debugging of Mule applications.  See Debug Toolbar.  
**Variables** panel: Provides Mule event and parameter data.  The Mule event includes message payload and attribute details, as well as Mule variable data. The parameters include component data, such as the component name.  
**Run and Debug** (MuleSoft) icon: Opens the **Run and Debug** panel, where you can click **Start Debugging (F5)** and find debugging information.  Keyboard shortcut: Cmd+Shift+d (Mac) or Ctrl+Shift+d (Windows)  
**Watch** panel: Helps you evaluate variables and expressions.  
**Call Stack** panel: Identifies the functions or procedures that are currently in the stack.  
**Breakpoints** panel: Lists all breakpoints in your Mule application.  
**Terminal** console: Displays the output of the Maven build process and the results of the deployment to the embedded Mule Runtime engine.  
**Breakpoint** icon: Identifies a line in the configuration XML to pause execution of the flow so that you can check for and fix any issues.  
**Breakpoint** icon: Identifies a component that contains one or more breakpoints.  
## Add a Breakpoint
A breakpoint enables you to pause your Mule application at a specific place to learn more about what is happening. You can either add a breakpoint to a configuration XML file or to a component in the canvas UI.
### Add a Breakpoint in a Configuration File
To add a breakpoint in a configuration XML file:
  1. In Anypoint Code Builder, on the Explorer view, open your configuration XML file, for example, `my-project-name.xml`.
  2. Open the Run and Debug panel.
Show me how
     * Click the (**Run and Debug**) icon in the activity bar.
     * Use the keyboard shortcuts:
       * Mac: Cmd+Shift+d
       * Windows: Ctrl+Shift+d
     * In the desktop IDE, select **View** > **Run**.
     * In the cloud IDE, click the (menu) icon, and select **View** > **Run**.
  3. Click the line number in your `<flow-ref>` component to add a breakpoint on that component:
You can also use F9 to add a breakpoint to the current line.
  4. In your configuration XML file, add two more breakpoints for the `<db:select>` and the `<set-variable>` components.
All breakpoints appear in the **Breakpoints** panel:


### Add a Breakpoint to a Component in the Canvas UI
To add a breakpoint to a component in the canvas UI:
  1. In Anypoint Code Builder, on the Explorer view, open your configuration XML file, for example, `flights-implementation.xml`.
  2. Open the Run and Debug panel.
Show me how
     * Click the (**Run and Debug**) icon in the activity bar.
     * Use the keyboard shortcuts:
       * Mac: Cmd+Shift+d
       * Windows: Ctrl+Shift+d
     * In the desktop IDE, select **View** > **Run**.
     * In the cloud IDE, click the (menu) icon, and select **View** > **Run**.
  3. In the canvas UI, right-click on the component you want to add a breakpoint to:
  4. Select **Add Breakpoint**.
A breakpoint icon appears on the component and in the configuration XML for that component.


## Run Your Application in Debug Mode
After setting up your debug conditions, run a debug session and evaluate your Mule application at each breakpoint:
  1. Open the Run and Debug panel.
Show me how
     * Click the (**Run and Debug**) icon in the activity bar.
     * Use the keyboard shortcuts:
       * Mac: Cmd+Shift+d
       * Windows: Ctrl+Shift+d
     * In the desktop IDE, select **View** > **Run**.
     * In the cloud IDE, click the (menu) icon, and select **View** > **Run**.
  2. Click the (**Start Debugging (F5)**) icon for **Debug Mule Application**.
Alternatively, if the **Start Debugging (F5)** icon is not present:
    1. Click **Run and Debug**.
    2. If a **Select debugger** dropdown menu appears, select **Mule Xml Debugger** to initiate the debugging session:
When the application deploys successfully, you see a `DEPLOYED` log message in the output panel:
```
**********************************************************************
*       - - + DOMAIN + - -        * - - + STATUS + - - *
**********************************************************************
* default                    * DEPLOYED      *
**********************************************************************
```
## Run Your Application in Debug Mode
After setting up your debug conditions, run a debug session and evaluate your Mule application at each breakpoint:
  1. Open the Run and Debug panel.
Show me how
     * Click the (**Run and Debug**) icon in the activity bar.
     * Use the keyboard shortcuts:
       * Mac: Cmd+Shift+d
       * Windows: Ctrl+Shift+d
     * In the desktop IDE, select **View** > **Run**.
     * In the cloud IDE, click the (menu) icon, and select **View** > **Run**.
  2. Click the (**Start Debugging (F5)**) icon for **Debug Mule Application**.
Alternatively, if the **Start Debugging (F5)** icon is not present:
    1. Click **Run and Debug**.
    2. If a **Select debugger** dropdown menu appears, select **Mule Xml Debugger** to initiate the debugging session:
When the application deploys successfully, you see a `DEPLOYED` log message in the output panel:
```
**********************************************************************
*       - - + DOMAIN + - -        * - - + STATUS + - - *
**********************************************************************
* default                    * DEPLOYED      *
**********************************************************************
```



Selecting **Run** > **Start without Debugging** produces an error.   
---  
Anypoint Code Builder packages your application and deploys the application to the embedded Mule runtime engine. A terminal opens so you can view the status:
The terminal displays a message and the status bar turns red to indicate that the application is running.
Use buttons on the debug toolbar to control debugging of Mule applications.
## Debug Toolbar
**Continue** F5  Proceeds to the next breakpoint, if present, and pauses execution of the application. Otherwise, continues to the end of the application.  
---  
**Step Over** F10  Proceeds to the next component in the flow, where execution pauses. At a Flow Ref component (`<flow-ref/>`), clicking **Step Over** proceeds to the next component in the flow but _does not_ follow the Flow Ref logic to a referenced flow or proceed to another flow. Step Over Details **Configuration XML example** : ```
<flow name="flow1" doc:name="Flow" >
 <http:listener path="greet" config-ref="HTTP_Listener_config" doc:name="Listener"/>
 <flow-ref name="myNewFlow" /> **(1)**
 <logger doc:name="Logger1" message="test1"/> **(2)**
</flow>
<flow name="flow2" doc:name="Flow" >
 <logger doc:name="Logger2" message="test2"/>
</flow>
```
**Step Over behavior** : | Skips `<flow-ref/>` logic  
---  
Reaches `<logger/>` named `Logger1`  
**Step Into** F11  Proceeds to the next component in the flow, where execution pauses. At a Flow Ref component (`<flow-ref/>`), clicking **Step Into** follows the logic of the component and proceeds to the first component in the referenced flow. If a component in a flow follows a Flow Ref component, **Step Into** returns to that component after the last component in the referenced flow (or flows). Step Into Details **Configuration XML example** : ```
<flow name="flow1" doc:name="Flow" >
 <http:listener path="greet" config-ref="HTTP_Listener_config" doc:name="Listener"/>
 <flow-ref name="myNewFlow" /> **(1)**
 <logger doc:name="Logger1" message="test1"/> **(3)**
</flow>
<flow name="myNewFlow" doc:name="Flow" >
 <logger doc:name="Logger2" message="test2"/> **(2)**
</flow>
```
**Step Into behavior** : | Enters `<flow-ref/>` to follow logic to `myNewFlow`  
---  
Reaches `Logger2` in next flow, `myNewFlow`  
Returns to flow `flow1` to reach `Logger1`  
**Step Out** Shift+F11  Exits the current flow and attempts to return to a previous flow. If a previous flow doesn’t exist, the debugger behaves like **Continue**.  
**Restart** Shift+Cmd+F5 (Mac) or Shift+Ctrl+F5 (Windows)  Stop and restart the application without packaging new dependencies, such as new connector dependencies in your `pom.xml` file.  
**Stop** Shift+F5  Stop execution of the application. The next debugging session that you start packages the application with any new dependencies.  
## Perform a Hot Deploy When Debugging
As you debug your application, periodically perform a hot deployment. A hot deployment updates a running instance of your application but does not package new dependencies, such as new connector dependencies in your `pom.xml`.
To perform a hot deploy:
  1. Ensure your Mule application is running in the IDE.
  2. Make an update to your application.
  3. Click the **Save and Hot-deploy to Mule Runtime** (lightning) icon to deploy the application with the change:


## Stop a Debug Session
To stop your debug session, in the **Run and Debug** panel, click the (**Stop**) icon.
The status bar no longer indicates that the application is running.