Debugger Status
From Lazarus wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
This is based on Lazarus 2.0
Available Debuggers
- GNU Debugger (gdb)
- The first debugger that was supplied with Lazarus. This debugger uses GDB as backend. The IDE performs translations between gdb's none Pascal-ish interface and the interface provided by the IDE. Package: LazDebuggerGdbmi
- GNU Debugger through SSH (gdb)
- Allows to launch GDB over an ssh connection for remote debugging. This has however some serious limitations. Package: LazDebuggerGdbmi
- GNU remote debugger (gdbserver)
- Remote debugger using GdbServer (part of the gdb suite). Package: LazDebuggerGdbmi
- LLDB Debugger (Alpha)
- A basic LLDB based backend. This is a prove of concept implementation. The IDE displays raw LLDB output (no translation, no clean-up...) and there are no plans to add translation of the LLDB output. For using LLDB on Pascal applications the "LLDB Debugger (with fpdebug)" should be used. Package: LazDebuggerLldb
- LLDB Debugger (with fpdebug)
- This debugger uses LLDB as a backend. In order to display Pascal-style results, it uses the "fpdebug" engine to show locals/watches. LLDB is used to control stepping, breakpoint and execution. For reading data LLDB is used to read the raw memory only. Package: LazDebuggerFPLldb
- GNU Debugger (with fpdebug)
- Using GDB for stepping/breakpoints/... and FpDebug for watches. Package: LazDebuggerFPGdbmi
- FpDebug / LazDebuggerFp - integrated DWARF debugger / (Known issues)
- A new debugger completely implemented in Pascal. This debugger implements the DWARF standard (currently 2 and 3 are partly implemented). It has special implementations added to interpret info provided by FPC. It can currently be used on Windows and Linux (very basic support for MacOS). Package: LazDebuggerFP
- FpDebug / LazDebuggerFpRspRemote
- A new remote debugger to communicate with a gdbserver stub using gdb's remote serial protocol over tcp/ip (in future this could be expanded to include serial/UART). This debugger inherits from LazDebuggerFP, hence in principle supports the same functionality. Currently it only supports the AVR target. Not stable yet. Package: LazDebuggerFpRspRemote
- DAB / LazDABDebugger
- The Debug Adapter Protocol (DAB) is a protocol to abstract the communication between a Debugger-frontend like Lazarus, and an underlying debugger like FpdServer. LazDABDebugger is a debugger that connects to (any?) DAB-adapter. This makes is possible to debug other languages or different platforms within Lazarus.
- DAB - FpdServer / LazFPDServerDebugger
- A derivative of LazDABDebugger specifically shaped to work with FpdServer, a debugger based on FpDebug that supports the DAB-protocol.
Notes
For the GDB and LLDB based debugger, support is indicated based on the assumptino that your version of GDB supports this. Support indication is generally based on current GDB/LLDB for mainstream OS.
Fp-Debugger currently only works for Windows and Linux
Start/Stop
Feature | Key | GdbMi | GdbMi+Ssh | GdbServer | GdbMi+FpDebug | Lldb+FpDebug | Fp-Debugger | Comments |
---|---|---|---|---|---|---|---|---|
Run | F9 | Y | Y | Y | Y | Y | Y | |
Run to first line (Step) | F7 / F8 | Y | Y | Y | Y | ? | N | For GUI apps the first line is in the code generated by the IDE |
Attach | Y | Y | Y | Y | ? | N | ||
Detach | Y | Y | Y | Y | ? | N | ||
Stop | Y | Y | Y | Y | Y | Y | ||
Reset Debugger | Y | Y | Y | Y | Y | Y | Kill/Stop |
Execution Control
Feature | Key | GdbMi | GdbMi+Ssh | GdbServer | GdbMi+FpDebug | Lldb+FpDebug | Fp-Debugger | Comments |
---|---|---|---|---|---|---|---|---|
Continue (Run) | F9 | Y | Y | Y | Y | Y | Y | |
Step over line | F8 | Y | Y | Y | Y | Y | Y | |
Step into line | F7 | Y | Y | Y | Y | Y | Y | |
Step (over) to line at cursor | F8 | Y | Y | Y | Y | ? | Partial | "STEP OVER" - This works only within the current procedure.
|
Run to line at cursor | N | N | N | N | N | N | Workaround: Use F5 to set a breakpoint, then F9 to run | |
Step out (of current function) | Shift-F8 | Y | Y | Y | Y | Y | Y | |
Step over asm | Y | Y | Y | Y | Y | Y | ||
Step into asm | Y | Y | Y | Y | Y | Y | ||
Step over "none breaking" breakpoint | Y | Y | Y | Y | ? | Y | Any "step" command will continue to its step-end after a "none breaking" Breakpoints. This is a Breakpoint that has its break property turned off. It may record a snapshot, log a message, or enable/disable other breakpoints.
| |
Step over ignored exceptions | Y | Y | Y | Y | ? | Y | Only for standard fpc exception handling. And (Lazarus 2.2) SEH on Win64. Win32 and other OS structured exception handling are not supported (Ignored exceptions will turn Stepping into Running). | |
Step from except to finally or except | Y | Y | Y | Y | ? | Y | Only for standard fpc exception handling. And (Lazarus 2.2) SEH on Win64. Win32 and other OS structured exception handling are not supported (Ignored exceptions will turn Stepping into Running). |
Breakpoints / Exceptions
Feature | Key | GdbMi | GdbMi+Ssh | GdbServer | GdbMi+FpDebug | Lldb+FpDebug | Fp-Debugger | Comments |
---|---|---|---|---|---|---|---|---|
Breakpoint on Source Line | Y | Y | Y | Y | Y | Y | ||
Breakpoint on Assembler Line | Y | Y | Y | Y | Y | Y | ||
Watchpoint / Breakpoint Data | Y | Y | Y | Y | ? | Partial | ||
.... | . | . | . | . | . | . |
Data
Feature | Key | GdbMi | GdbMi+Ssh | GdbServer | GdbMi+FpDebug | Lldb+FpDebug | Fp-Debugger | Comments |
---|---|---|---|---|---|---|---|---|
Watches | Y | Y | Y | Y | Y | Y | ||
Locals | Y | Y | Y | Y | Y | Y | ||
Stack | Y | Y | Y | Y | Y | Y | ||
Threads | Y | Y | Y | Y | Y | Y | Running State indicator may not be accurate | |
Inspect | Y | Y | Y | Y | Y | Y | ||
Evaluate / Modify | Y | Y | Y | Y | ? | Only Evaluate No Modify |
||
Watch/Inspect Properties | N | N | N | N | N | N | Using "DWARF" properties that refer directly to a field (no getter method) are shown. | |
Watch/Inspect Function calls | N | N | N | N | N | N |