> ## Documentation Index
> Fetch the complete documentation index at: https://flowdeck.studio/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Debugging

> Debug iOS and macOS applications with LLDB

FlowDeck integrates with LLDB-DAP to provide a powerful debugging experience for Swift applications directly within Cursor, offering features comparable to Xcode's debugging capabilities.

## Features

* **Breakpoint Management** - Set, disable, and manage breakpoints
* **Variable Inspection** - Examine variable values during execution
* **Call Stack** - Explore threads and the entire app call stack
* **Console Output** - View application logs during debugging (OSLog)
* **Step Controls** - Step over, into, and out of functions
* **Expression Evaluation** - Evaluate Swift expressions in context

## Getting Started

<Steps>
  <Step title="Open your project">
    Open your iOS project in Cursor
  </Step>

  <Step title="Set breakpoints">
    Click in the gutter next to line numbers to set breakpoints
  </Step>

  <Step title="Choose target">
    Select your scheme and target (simulator or device)
  </Step>

  <Step title="Start debugging">
    Press `F5` and select **FlowDeck (LLDB)** from the list
  </Step>
</Steps>

## Debugging Controls

### Toolbar Actions

* **Continue** (`F5`) - Resume execution
* **Step Over** (`F10`) - Execute current line
* **Step Into** (`F11`) - Enter function calls
* **Step Out** (`⇧F11`) - Exit current function
* **Restart** (`⇧⌘F5`) - Restart debug session
* **Stop** (`⇧F5`) - End debugging

### Breakpoint Types

#### Standard Breakpoints

Click in the gutter or press `F9` on any line.

#### Conditional Breakpoints

Right-click a breakpoint and select **Edit Breakpoint**:

* **Expression** - Break when condition is true
* **Hit Count** - Break after N hits
* **Log Message** - Log without stopping execution

#### Exception Breakpoints

In the Breakpoints panel:

* Add **All Exceptions** breakpoint
* Add **Swift Error** breakpoint
* Add **Objective-C Exception** breakpoint

## Debug Console

The debug console allows you to:

* View application output
* Execute LLDB commands (prefix with `-exec`)
* Evaluate Swift expressions
* Inspect variables with `po` command

### Useful LLDB Commands

```lldb theme={null}
po variableName           // Print object description
p variableName            // Print raw value
bt                        // Show backtrace
frame variable           // Show all local variables
thread list              // List all threads
```

## Variables Panel

The Variables panel shows:

* **Locals** - Variables in current scope
* **Globals** - Global variables
* **Statics** - Static variables

Right-click variables to:

* Copy value
* Copy as expression
* Add to watch
* Set value

## Watch Expressions

Add expressions to monitor:

1. Click **+** in Watch panel
2. Enter Swift expression
3. View updated values at each breakpoint

## Advanced Configuration

For custom debug configurations and launch options, see [Debug Configuration](/extension/launch-json).

<Tip>
  Use the **Debug Console** tab during debugging to execute LLDB commands directly. Prefix commands with `-exec` for raw LLDB access.
</Tip>

## Tips for Effective Debugging

* **Use conditional breakpoints** to avoid stopping unnecessarily
* **Watch key variables** to track state changes
* **Check the call stack** to understand execution flow
* **Use log points** for non-intrusive debugging
* **Leverage LLDB commands** for advanced inspection

## Troubleshooting

### Breakpoints Not Hit

* Ensure Debug build configuration
* Check optimization settings are disabled
* Verify source maps are generated

### Variables Not Visible

* Build with debug symbols enabled
* Check you're in Debug configuration
* Ensure optimization is turned off

### Debugger Won't Attach

* Restart Cursor and simulator
* Clean build folder
* Check for conflicting debugger instances
