Sign in Join
Wiki copytemporary

Debugger Status: what changed

Revision 2 to 3. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
1-This is based on Lazarus 2.0
1+This is based on Lazarus 2.2.
22
33#### Available Debuggers
44
55**GNU Debugger (gdb)**
66
77The 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
88
99**GNU Debugger through SSH (gdb)**
1010
1111Allows to launch GDB over an ssh connection for remote debugging. This has however some serious limitations. Package: LazDebuggerGdbmi
1212
1313**GNU remote debugger (gdbserver)**
1414
1515Remote debugger using GdbServer (part of the gdb suite). Package: LazDebuggerGdbmi
1616
1717**LLDB Debugger (Alpha)**
1818
1919A 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
2020
2121**LLDB Debugger (with fpdebug)**
2222
2323This 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
2424
2525**[[FpGdbmiDebugger|GNU Debugger (with fpdebug)]]**
2626
2727Using GDB for stepping/breakpoints/... and FpDebug for watches. Package: LazDebuggerFPGdbmi
2828
29-**[[FpDebug]] / [[LazDebuggerFp|LazDebuggerFp - integrated Dwarf debugger]]**
29+**[[FpDebug]] / [[LazDebuggerFp|LazDebuggerFp - integrated DWARF debugger]] / ([Known issues](<https://gitlab.com/freepascal.org/lazarus/lazarus/-/issues?scope=all&state=all&label_name%5B%5D=Debug%3AFpDebug>))**
3030
31-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
31+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
3232
33-[![Note-icon.png](/wiki-images/b/be/Note-icon.png)](</File:Note-icon.png>)
33+**[[FpDebug]] / [[LazDebuggerFpRspRemote]]**
3434
35-**Note:**
35+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
3636
37+**[DAB](<https://microsoft.github.io/debug-adapter-protocol/>) / [LazDABDebugger](<https://gitlab.com/fpcprojects/LazDABDebugger>)**
38+
39+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](<https://microsoft.github.io/debug-adapter-protocol/implementors/adapters/>). This makes is possible to debug other languages or different platforms within Lazarus.
40+
41+**[DAB - FpdServer](<https://gitlab.com/fpcprojects/fpdserver>) / [LazFPDServerDebugger](<https://gitlab.com/fpcprojects/LazDABDebugger>)**
42+
43+A derivative of LazDABDebugger specifically shaped to work with FpdServer, a debugger based on FpDebug that supports the DAB-protocol.
44+
45+![Light bulb](https://upload.wikimedia.org/wikipedia/commons/d/d8/Nuvola_apps_ktip.png) **Note:**
46+
3747 * For the [[GDB]] and [[LLDB]] based debugger, support is indicated based on the assumption that your version of GDB supports this. Support indication is generally based on current GDB/LLDB for mainstream OS.
38- * [[FpDebug|FpDebugger]] currently only works for Windows and Linux
48+ * [[FpDebug|FpDebugger]] currently only works for Windows and Linux (AVR support is in progress)
3949 * The "LLDB Debugger (Alpha)" is not included below. It is a by-product of the "LLDB+FpDebug". It is not actively developed/maintained, other than what is needed for "LLDB+FpDebug".
4050
41-#### Availability (OS/Platform)
42-
43-OS/Platform | GdbMi | GdbMi+Ssh | GdbServer | GdbMi+FpDebug | Lldb+FpDebug | Fp-Debugger | Comments
44----|---|---|---|---|---|---|---
45-Linux | Y | Y | Y | Y | Depends on availability · of a stable LLDB | Y |
46-Mac | Depends on availability · of a stable · and codesigned GDB | ? | ? | ? | Y | N |
47-Windows | Y | Y | Y | Y | Depends on availability · of a stable LLDB | Y |
51+Features
52+---
4853
54+#### Availability (OS/Platform)
4955
50-
51-#### Start/Stop
52-
56+OS/Platform | GdbMi | GdbMi+Ssh | GdbServer | GdbMi+FpDebug | Lldb+FpDebug | Fp-Debugger | Comments
57+Linux | Y | Y | Y | Y | Depends on availability · of a stable LLDB | Y · (Intel/AMD) |
58+Mac (Intel) | Depends on availability · of a stable · and codesigned GDB | ? | ? | ? | Y | N |
59+Mac (M1) | Depends on availability · of a stable · and codesigned GDB | ? | ? | ? | Beta · Lazarus 2.2 and higher | N | The "LLDB Debugger (Alpha)" (without FpDebug) can (be attempted to) be used. Features (such as watches) will be limited to "c style"
60+Windows | Y | Y | Y | Y | Depends on availability · of a stable LLDB | Y · (Intel/AMD) | For Windows 32 bit: FpDebug does not support SEH exceptions (used by default since FPC 3.2). Stepping over/after such exceptions may not work properly.
61+AVR | N | N | Y | N | N | Beta · (via a remote connection to a gdbserver stub) · Package "LazDebuggerFpRspRemote" | The features for AVR remote debugging (using FpDebug+gdbserver) may differ from the Fp-Debugger features listed below.
62+
63+#### Start/Stop
64+
5365Feature | Key | GdbMi | GdbMi+Ssh | GdbServer | GdbMi+FpDebug | Lldb+FpDebug | Fp-Debugger | Comments
54----|---|---|---|---|---|---|---|---
55-Run | F9 | Y | Y | Y | Y | Y | Y |
56-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
66+Run | `F9` | Y | Y | Y | Y | Y | Y |
67+Run to first line (Step) | `F7` / `F8` | Y | Y | Y | Y | ? | Lazarus 3.0 and higher | For GUI apps the first line is in the code generated by the IDE
5768Run to line at cursor | | Y | Y | Y | Y | N | Y | Lazarus 2.2 and higher
5869Attach | | Y | Y | Y | Y | ? | Lazarus 2.2 and higher |
5970Detach | | Y | Y | Y | Y | ? | Lazarus 2.2 and higher |
60-Stop | Ctrl+F2 | Y | Y | Y | Y | Y | Y |
71+Stop | `Ctrl`+`F2` | Y | Y | Y | Y | Y | Y |
6172Reset Debugger | | Y | Y | Y | Y | Y | Y | Kill/Stop · Restart the external debugger (gdb/lldb)
6273Debugger stopped dialog when app exits | | Y | Y | Y | Y | Y | Y | Configurable
63-Run without debugging | Ctrl+⇧ Shift+F9 | Y | Not debugger specific
74+Run without debugging | `Ctrl`+`⇧ Shift`+`F9` | Y | Not debugger specific
6475
65-#### Execution Control
66-
76+#### Execution Control (Run, Step, ...)
77+
6778Feature | Key | GdbMi | GdbMi+Ssh | GdbServer | GdbMi+FpDebug | Lldb+FpDebug | Fp-Debugger | Comments
68----|---|---|---|---|---|---|---|---
69-Continue (Run) | F9 | Y | Y | Y | Y | Y | Y |
70-Step over line | F8 | Y | Y | Y | Y | Y | Y |
71-Step into line | F7 | Y | Y | Y | Y | Y | Y |
72-Step (over) to line at cursor | F4 | Y | Y | Y | Y | N | Y | "STEP OVER" - This works only within the current procedure. It will go to the selected line, or stop if the current procedure is left. · It will *step* *over* any recursive calls of the procedure, therefore not stopping at the line during recursion.
79+Continue (Run) | `F9` | Y | Y | Y | Y | Y | Y |
80+Step over line | `F8` | Y | Y | Y | Y | Y | Y |
81+Step into line | `F7` | Y | Y | Y | Y | Y | Y |
82+Step (over) to line at cursor | `F4` | Y | Y | Y | Y | N | Y | "STEP OVER" - This works only within the current procedure. It will go to the selected line, or stop if the current procedure is left. · It will *step* *over* any recursive calls of the procedure, therefore not stopping at the line during recursion.
7383Run to line at cursor | | Y | Y | Y | Y | N | Y | Only Lazarus 2.2 and higher
74-Step out (of current function) | ⇧ Shift+F8 | Y | Y | Y | Y | Y | Y |
75-Step over asm | Alt+F8 | Y | Y | Y | Y | Y | Y |
76-Step into asm | Alt+F7 | Y | Y | Y | Y | Y | Y |
84+Step out (of current function) | `⇧ Shift`+`F8` | Y | Y | Y | Y | Y | Y |
85+Step over asm | `Alt`+`F8` | Y | Y | Y | Y | Y | Y |
86+Step into asm | `Alt`+`F7` | Y | Y | Y | Y | Y | Y |
7787Smart source or asm stepping (over/into) | | Y | Y | Y | Y | Y | Y | Assign one key (one for "over", one for "into") that acts as source-line or asm stepping, depending on window focus
7888Pause | | Y | depends on gdb, mostly "No" | Y | Y | Y | Y |
89+Suspend individual threads | | N | N | N | N | N | Y | While the app is paused threads can be suspended/resumed for upcoming stepping/running
7990Step: steps over "none breaking" breakpoint | | Y | Y | Y | Y | ? | Lazarus 2.0 or 2.2 ? | 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. · [![Warning-icon.png](/wiki-images/b/b2/Warning-icon.png)](</File:Warning-icon.png>) · **Warning:** The "auto-continue" (time based) function may not return to stepping, but instead "run/continue" execution.
8091Step: steps over ignored exceptions | | Y | Y | Y | Y | ? | Lazarus 2.2 | 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).
8192Source-Step: steps from except to finally or except | | Y | Y | Y | Y | ? | Lazarus 2.2 | 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).
8293Executable/Code line indicators | | Y | Y | Y | Y | Y | Y | Blue dots in the gutter indicate lines with debug info.
94+**Breakpoints / None-breaking breakpoints / Auto-continue breakpoints / Disabled breakpoints** A breakpoint usually pauses your app, in addition it can perform tasks like logging a message (debugger event log), dumping data to the log, taking a snapshot (debugger history). · A none-breaking breakpoint will perform those extra tasks, but not pause your app. · An auto-continue breakpoint will pause your app (and perform any other action) for a given amount of milliseconds (during which you can use the pause button, to pause permanently), after that it will continue your app. It usually continues using "Run", therefore loosing any current single-step action · A disabled breakpoint will do nothing. It is as if it does not exist. **Stepping and breakpoints / exceptions** If any debugger pauses the target-app at a breakpoint or exception while single stepping, then the single-step is lost. The breakpoint/exception may be in a deeply nested called function, and you cannot continue the single-step. I.e. there is no build in way to get back to the function where you started your step, and finish this step. For this you need to go through the callstack yourself and find the start location and use breakpoints **Stepping and none-breaking-breakpoints / Ignored-exceptions** Most/All? debugger backends can in this case continue to the position where the single-step would have ended. (This may be limited for asm stepping). In case of an exception the single step will end at the next finally or except. "Next" from the point of view of the step-command. I.e., any finally inside a "stepped over function" will be stepped over, but any finally on the same level as the step began will be used as end point. If there is none on the same level, then the next outer will be used. · This feature relies heavily on FPC implementation details. Thus it may not work with newer FPC versions.
8395
84-**Breakpoints / None-breaking breakpoints / Auto-continue breakpoints / Disabled breakpoints**
85-
86-A breakpoint usually pauses your app, in addition it can perform tasks like logging a message (debugger event log), dumping data to the log, taking a snapshot (debugger history).
87-A none-breaking breakpoint will perform those extra tasks, but not pause your app.
88-An auto-continue breakpoint will pause your app (and perform any other action) for a given amount of milliseconds (during which you can use the pause button, to pause permanently), after that it will continue your app. It usually continues using "Run", therefore loosing any current single-step action
89-A disabled breakpoint will do nothing. It is as if it does not exist.
90-
91-**Stepping and breakpoints / exceptions**
92-
93-If any debugger pauses the target-app at a breakpoint or exception while single stepping, then the single-step is lost. The breakpoint/exception may be in a deeply nested called function, and you cannot continue the single-step. I.e. there is no build in way to get back to the function where you started your step, and finish this step. For this you need to go through the callstack yourself and find the start location and use breakpoints
94-
95-**Stepping and none-breaking-breakpoints / Ignored-exceptions**
96-
97-Most/All? debugger backends can in this case continue to the position where the single-step would have ended. (This may be limited for asm stepping). In case of an exception the single step will end at the next finally or except. "Next" from the point of view of the step-command. I.e., any finally inside a "stepped over function" will be stepped over, but any finally on the same level as the step began will be used as end point. If there is none on the same level, then the next outer will be used.
98-This feature relies heavily on FPC implementation details. Thus it may not work with newer FPC versions.
99-
100-#### Breakpoints / Exceptions
101-
96+#### Breakpoints / Exceptions
97+
10298Feature | Key | GdbMi | GdbMi+Ssh | GdbServer | GdbMi+FpDebug | Lldb+FpDebug | Fp-Debugger | Comments
103----|---|---|---|---|---|---|---|---
104-Breakpoint on Source Line | F5 | Y | Y | Y | Y | Y | Y |
99+Breakpoint on Source Line | `F5` | Y | Y | Y | Y | Y | Y |
105100Breakpoint on Assembler Line | | Y | Y | Y | Y | Y | Y |
106101Watchpoint / Breakpoint Data | | Y | Y | Y | Y | ? | Partial | Amount/Size is limited by architecture Intel based systems usually have 4 Watchpoints, each with a max size of 32 bit (64 bit on 64bit CPU)
107-Conditional Break/Watch-point | | (Y) | (Y) | (Y) | (Y) | ? | Y | GDB based debuggers are limited to GDB's understanding of the conditional expression
102+Conditional Break/Watch-point | | (Y) | (Y) | (Y) | (Y) | Condition must be C style for LLDB · E.g.: a==1 / No strings, only simple types · Not all data types supported. | Y | **GDB based debuggers are limited** to GDB's understanding of the conditional expression. · **No strings** , except with $_streq() / Not all data types supported.
108103Enable/Disable Break/Watch-point according to program flow | | Y | Y | Y | Y | Y | Y | Enable/Disable a breakpoint (or a group of) when execution passes through a pre-defined point in your code. So you can setup that the debugger will only break/skip-breaking, when the code is called in a specific order, or from a specific outer subroutine.
109104Ignore exception by class | | Y | Y | Y | Y | Y | Y | Configurable for each project
110-Break/Watch-point overview Window | Ctrl+Alt+B | Y | Y | Y | Y | Y | Y |
105+Break/Watch-point overview Window | `Ctrl`+`Alt`+`B` | Y | Y | Y | Y | Y | Y |
111106TODO: .... Document Breakpoint properties | | . | . | . | . | . | . |
112107TODO: .... Document Breakpoint actions | | . | . | . | . | . | . |
108+**GdbMi+Ssh** Some functionality depends on the ability to use "Pause". If "Pause" does not work, break/watch-points can not be changed/added/removed while the target app is running. Only when the target app pauses at a breakpoint (or for other reasons), then can changes be made.
113109
114-**GdbMi+Ssh**
115-
116-Some functionality depends on the ability to use "Pause". If "Pause" does not work, break/watch-points can not be changed/added/removed while the target app is running. Only when the target app pauses at a breakpoint (or for other reasons), then can changes be made.
117-
118-#### Data
119-
110+#### Data (Watches, Locals, ...)
111+
120112Feature | Key | GdbMi | GdbMi+Ssh | GdbServer | GdbMi+FpDebug | Lldb+FpDebug | Fp-Debugger | Comments
121----|---|---|---|---|---|---|---|---
122-Watches | Ctrl+Alt+W | Y | Y | Y | Y | Y | Y |
123-Locals | Ctrl+Alt+L | Y | Y | Y | Y | Y | Y |
124-Stack | Ctrl+Alt+S | Y | Y | Y | Y | Y | Y |
125-Threads | Ctrl+Alt+T | Y | Y | Y | Y | Y | Y | Running State indicator may not be accurate
126-Inspect | Alt+F5 | Y | Y | Y | Y | Y | Y | View members in property Grid. Double-click to inspect members
127-Evaluate / Modify | Ctrl+F7 | Y | Y | Y | Y | ? | Only Evaluate · No Modify |
128-Disassembler | Ctrl+Alt+D | Y | Y | Y | Y | ? | Partial |
129-Watch/Inspect Class Properties | | N | N | N | N | N | N | Using "DWARF" properties that refer directly to a field (no getter method) are shown.
130-Watch/Inspect Function calls | | N | N | N | N | N | N |
113+Watches | `Ctrl`+`Alt`+`W` | Y | Y | Y | Y | Y | Y |
114+Locals | `Ctrl`+`Alt`+`L` | Y | Y | Y | Y | Y | Y |
115+Stack | `Ctrl`+`Alt`+`S` | Y | Y | Y | Y | Y | Y |
116+Threads | `Ctrl`+`Alt`+`T` | Y | Y | Y | Y | Y | Y | Running State indicator may not be accurate
117+Inspect | `Alt`+`F5` | Y | Y | Y | Y | Y | Y | View members in property Grid. Double-click to inspect members
118+Evaluate / Modify | `Ctrl`+`F7` | Y | Y | Y | Y | ? | Y · Modify only in Lazarus 2.2 and higher | See notes below
119+Memory Viewer | | Y | Y | Y | Y | Y | Y | Since Lazarus 4.0
120+Watch/Inspect Class Properties | | N | N | N | N | N | N · Work in progress · Will at least require a new major FPC release: 3.4.0 or up | Using "DWARF" properties that refer directly to a field (no getter method) are shown.
121+Watch/Inspect Function calls | | N | N | N | N | N | Partial · BETA: Lazarus 2.2 and higher can call certain functions in watches · Please see [[FpDebug-Watches-FunctionEval]] |
122+Watch/Inspect Intrinsic helper functions | | N | N | N | N | N | Lazarus 2.3 and higher · Please see [[FpDebug-Watches-Intrinsic-Functions]] |
131123Use Instance type/class | | Y | Y | Y | Y | Y | Y | By default the debugger shows variables according to their declared type/class. "Sender: TObject" will only show as TObject. · The debugger can detect the real class of the instance (e.g. a TButton) and show all details
132124Tooltip / Hint | | Y | Y | Y | Y | Y | Y |
133125Tooltip / Hint => Auto-deref pointer | | Y | Y | Y | Y | Y | Y |
134126Tooltip / Hint => Use Instance Class | | Y | Y | Y | Y | Y | Y |
135127Paste value into Watches window | | Y | Y | Y | Y | Y | Y | Paste directly into watches window, no need to press "Add new watch"
136-Drag/Drow value from source-editor to Watches window | | Y | Y | Y | Y | Y | Y |
128+Drag/Draw value from source-editor to Watches window | | Y | Y | Y | Y | Y | Y |
137129TODO: .... Document Watches properties | | . | . | . | . | . | . |
130+Value-Formatters (3.99) · [[IDE Window: IDE Optiorns - Debugger Value-Formatter]] | | Y | Y | Y | Y | Y | Y | Display colors by name, TDate in human-readable form, named constants, ...
131+**Modify** All debuggers have restriction towards what type of data they can modify (modify target variables during a debug session). · Managed types (ansistring, dyn array) can not be modified by any debugger. Structured types can only be modified field by field. · For other types support depends on the debugger backend. · - For Gdb/Lldb this is currently not documented. · - For FpDebug the following do not NOT work: floating, currency, all strings incl shortstring, packed/bitpacked types.
138132
139-#### Other
140-
133+#### Disassembler
134+
141135Feature | Key | GdbMi | GdbMi+Ssh | GdbServer | GdbMi+FpDebug | Lldb+FpDebug | Fp-Debugger | Comments
142----|---|---|---|---|---|---|---|---
143-History | Ctrl+Alt+H | Y | Y | Y | Y | Y | Y | Allow to review Watches/Locals/Stack from when your app was previously paused. This does not restore the state of the application. It only allows to view the value that the debugger evaluated previously.
136+Disassembler | `Ctrl`+`Alt`+`D` | Y | Y | Y | Y | ? | Y |
137+History Navigation | | Y | Y | Y | Y | Y | Y | Navigate back and forward between previously disassembled addresses and current address · Lazarus 3.0 and up
138+Call/Jump target annotations | | (Y) · Depends on GDB version | ? | Y · Lazarus 3.0 | Information on the target of a call/jmp statement is displayed
139+Ctrl-Click / Link to Call/Jump target | | N | N | N | N | N | Y · Lazarus 3.0 | Ctrl click on a call/jump statement and view the target address · Ctrl hover over a call/jump statement and highlight the target (if in view)
140+
141+#### Other
142+
143+Feature | Key | GdbMi | GdbMi+Ssh | GdbServer | GdbMi+FpDebug | Lldb+FpDebug | Fp-Debugger | Comments
144+History | `Ctrl`+`Alt`+`H` | Y | Y | Y | Y | Y | Y | Allow to review Watches/Locals/Stack from when your app was previously paused. This does not restore the state of the application. It only allows to view the value that the debugger evaluated previously.
144145History - Import / Export | | Y | Y | Y | Y | Y | Y | Save your debug results for later review. · Or send them to a co-worker for feedback · Combined with "snapshot" taking breakpoints, you can send a prepared project (watches/breakpoints set) to a co-worker, have them run the project in the debugger, and return the result to you.
145-Event log | Ctrl+Alt+V | Y | Y | Y | Y | Y | Y |
146+Event log | `Ctrl`+`Alt`+`V` | Y | Y | Y | Y | Y | Y |
146147View internal debug output | | Y | Y | Y | Y · partly | ? | Not applicable | View communication with the external debugger. For troubleshooting
147-Cross debugging 32<>64bit | | Y | Y | Y | Y · Win-64bit IDE can debug 32 bit target | ? | Y · Win-64bit IDE can debug 32 bit target | Gdb-based: Requires Gdb for target-bitness to be installed, and the "LazGDeBugControl.exe" (included in Lazarus) · Fp-Debugger: Not tested on Linux / For Windows, requires Lazarus 2.2
148-Remote debugging | | N | Y | Y | N | N | N |
149-Edit source code while debugging | | Y | Y | Y | Y | Y | Y | Fully working source editor (with code completion), while debugging · Editor keeps track of inserted/deleted lines, so breakpoints can be set to correct location
148+Debugging libraries · Stepping and Watches | | Y | Y | Y | Y | ? | Lazarus 3.0 and up | This pertains to debugging libraries compiled by FPC with debug info · Using FpDebug the executable-line-markers (blue dots) are missing.
149+Debugging libraries · Breakpoint | | Depend on various factors | Depend on various factors | Depend on various factors | Depend on various factors | ? | Lazarus 3.0 and up
150+Debugging libraries · Exceptions | | Depend on various factors | Depend on various factors | Depend on various factors | Depend on various factors | ? | Lazarus 3.0 and up
151+Cross debugging 32<>64bit | | Y | Y | Y | Y · Win-64bit IDE can debug 32 bit target | ? | Lazarus 2.2 · Win-64bit IDE can debug 32 bit target | Gdb-based: Requires Gdb for target-bitness to be installed, and the "LazGDeBugControl.exe" (included in Lazarus) · Fp-Debugger: Not tested on Linux / For Windows, requires Lazarus 2.2
152+Remote debugging | | N | Y | Y | N | N | N* | *Remote debugging of simple targets (only AVR currently) via gdb's remote serial protocol using package LazDebuggerFpRspRemote
153+Edit source code while debugging | | Y | Y | Y | Y | Y | Y | Fully working source editor (with code completion), while debugging · Editor keeps track of inserted/deleted lines, so breakpoints can be set to correct location
154+StdIn/StdOut redirect | | Y | Y | Y | Y | ? | Y · Lazarus 4.0 | Redirect the apps StdIn/StdOut by adding ">file" or "<file" to command line in "Run Parameters"
155+
156+#### Debug Info Support (DWARF, Stabs)
150157
158+· For a comparison between different version of DWARF please see [[DWARF|DWARF version comparison]]
159+\- | GdbMi | GdbMi+Ssh | GdbServer | GdbMi+FpDebug | Lldb+FpDebug | Fp-Debugger
160+Recommended | DWARF-2 (with sets) · -gw -godwarfsets | DWARF-3 · -gw3 | DWARF-3 · -gw3 | DWARF-3 · -gw3
161+Supported | All DWARF versions and "Stabs" · Stability of DWARF 3 and higher depends on FPC and GDB version · (older FPC produced incorrect DWARF-3 which caused troubles in GDB, but GDB has some issues too) | Only DWARF · All DWARF versions | Only DWARF · All DWARF versions | Only DWARF · All DWARF versions
162+
163+See also: [[Debugger Setup]]
164+
151165---
152-*From the Free Pascal wiki, page "Debugger Status", as the Internet Archive kept it on 2020-11-23, last changed on 2020-10-13. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
166+*From the Free Pascal wiki, page "Debugger Status", as the Internet Archive kept it on 2025-09-02, last changed on 2025-07-16. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history