Lazarus Debugger Implementation

From Lazarus wiki
Jump to navigationJump to search

English (en)

Introduction

This page provides an overview of how the debugger is implemented in the Lazarus IDE.

The debugger comprises the following parts:

Debugger-Frontend
The controls (run, step, stop buttons) and dialogs (watches, stack) in the IDE.
Debugger-Interface
A set of base-classes defining the communication between the front-end and each back-end
Debugger-Backend
Any code to control the debugged app, and retrieve/modify data from/in that app. The back-end may itself be split into an IDE back-end and an external back-end (e.g. gdb).

Debugger-Frontend

The code for the debugger frontend belongs currently directly to the IDE (to the project ide/lazarus.lpi). It is not a package of it's own.

Some of this code may one day be moved into a package. And maybe even introduce a package DebuggerFrontendIntf, to allow alternative 3rd party front-ends.

The code currently is located in

  • folder /debugger
  • folder /ide, files: debugmanager.pas and basedebugmanager.pas
  • folders ide/frames and debugger/frames for configuration settings.

BaseDebugManager is currently based on components\debuggerintf\dbgintfdebuggerbase.pp

Debugger-Interface

components\debuggerintf\

TDebuggerIntf - main class

TDebuggerDataMonitor and TDebuggerDataSupplier - stack, watches, ....

Debugger-Backend

GDB / GDBMI based

components\lazdebuggergdbmi

LLDB

components\lazdebuggers\LazDebuggerLldb components\lazdebuggers\LazDebuggerFpLldb

FpDebug

components\lazdebuggers\LazDebuggerFp