Debugging with Fire and Water
Fire and Water provide sophisticated debugging support for all supported target platforms and all Elements languages.
Depending on the target platform, the debugged applications will run locally, on a remote computer (connected to via CrossBox 2 over SSH), or a physical device (Android, iOS Device or Apple TV) connected locally or to a remote Mac.
Please refer to the Working w/ Devices topic for more details on what options are supported, and how to select the appropriate device.
After selecting the target machine or device, the remainder of the debugging process is the same, for all platforms. You have several options to launch or deploy your application, available via the "Project" menu and corresponding keyboard shortcuts
- "Run" – the default option, selecting this will build your application, deploy it (where necessary) to the target device, and then run it in the debugger. Most of the remainder of this topic will be focused on this option. (⌘R / Ctrl+R)
- "Run w/o Debugging" – selecting this will run your project, but without the debugger attached. You application will run as it would in production mode, without the overhead of the debugger, but also without its benefits. (⌘⇧R / Ctrl+Shift+R)
- "Run w/o Rebuilding" – this option will run your (already built) executable, but will not initiate a prior build, even if your application's code has changed. This is useful if you have partial changes but want to re-run the current version, or if you made (for example cosmetic) changes since building that do not affect your current debugging, and woukld prefer to skip the delay a new build would cause.
- "Deploy w/o Running" – where applicable (i.e. only for applications running on external devices, this option will deploy your app, but not launch it. This is helpful to just get your app installed, if you want to launch it manually. (⌘⇧D / Ctrl+Shift+D)
- "Test" – builds and runs a test application (which can be either the active project, or a dedicated Test Project associated with it) in the debugger, but in a special Testing mode for EUnit unit testing. (⌘T / Ctrl+T)
- "Test All Projects" – builds and runs all test applications in the special Testing mode. (⌘⇧T / Ctrl+Shift+T).
There are three optional phases that might need to happen before debugging can start:
- Building (if your project has changed since it was last built)
- Uploading (when using a remote computer) and/or
- Deploying (when using a device).
The IDE is smart about not repeating these preparational phases unnecessarily, for example skipping a rebuild or re-deployment if your application code has not changed between runs.
The IDE also will smartly decide which projects to build as part of the run, avoiding to build projects (even if Enabled) that do not factor into the current project.
You will see the status of each of these phases in the top right corner of the Jump bar, and also by its color-coding. The Jump Bar (and the application icon) will turn blue while building, and yellow when the debugs session starts. The status will show the different steps, and end up reading "Debugging", once the session is fully started.
You can also see the status (and more details about your debug sessions), in the Thread Pane and Callstacks, the fourth tab of the Navigation Pane which can be opened via ⌘4 / Ctrl+4) or via the "View|Show Threads and Callstacks" menu item.
Once a debug session is active and running, you can use the debugger to control it, including the following features:
- Pause, Step, Continue
- Exceptions and Signals
- The "Threads and Callstacks" Pane
The "Debug" Pane
- The Debug Console
- The Debug Inspector
- The Device Log (Android only)
- The Debugger inside the Code Editor
- The Disassembly View
- Locating Source Code for Mismatched Sybols