Lazarus IDE Debugger

Für Fragen rund um die Ide und zum Debugger
Antworten
Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Lazarus IDE Debugger

Beitrag von Lorca »

Hallo zusammen,

ein frohes neues Jahr an euch alle :)

Wie kann ich das Assembler Debug Popup Fenster deaktivieren?
Laufend gerate ich beim Debuggen in den Assembler Debugger. Da ich eh keine Ahnung von Assembler habe,
stört mich dieses Fenster.
Gibt es eine Möglichkeit dazu, dies irgendwo in den Lazarus Einstellungen der IDE auszuschalten?

Ebenfalls scheint der Debugger sich oft mit dem Einzelschritt (F7 einen Schritt hinein) und Ausführungsschritt (F8 einen Schritt weiter)
zu verschlucken. Ist dies in den IDE Einstellungen anzugeben? Oder mach ich etwas falsch?


Viele Grüße
Lorca

Benutzeravatar
theo
Beiträge: 10461
Registriert: Mo 11. Sep 2006, 19:01

Re: Lazarus IDE Debugger

Beitrag von theo »


wennerer
Beiträge: 505
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Lazarus IDE Debugger

Beitrag von wennerer »

Hallo Lorca,
schau mal in diesen Beitrag:
viewtopic.php?f=5&t=13111&p=116543&hili ... er#p116543

martin_frb schreibt dort:
Es gibt ein bekanntes Problem, dass beim "step over" in eine Procedure gesprungen wird (und ggf das Asm Window öffnet).
Tools > Optionen > Debugger. Dort im Property Grid: "FixIncorrectStepOver" aktivieren.
Das sollte helfen.
Viele Grüße
Bernd

martin_frb
Beiträge: 571
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Lazarus IDE Debugger

Beitrag von martin_frb »

Was das Step-in vs Step-over betrifft: Das tritt nur mit GDB auf (obwohl nicht klar, ob der Fehler in GDB oder FPC ist).
Verwende einfach FpDebug, und stepping funktioniert.

Für das asm Window gibt es in den Debugger setting eine Option das es auch automatisch wieder schließt, wenn man das Programm weiterlaufen lässt.
Aber das Fenster geht immer auf, wenn der Debugger anhält und die Source nicht findet. Weil dann das Asm Fenster die einzige Möglichkeit ist anzuzeigen wo das Programm gerade ist.

Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Re: Lazarus IDE Debugger

Beitrag von Lorca »

theo hat geschrieben:
Mi 6. Jan 2021, 14:37
Das Thema wurde im englischen Forum schon diskutiert.
https://forum.lazarus.freepascal.org/in ... ic=39565.0
https://forum.lazarus.freepascal.org/in ... ic=44121.0
Hallo theo,

herzlichen Dank für Deine Info. :)
Ich habe zwar recht lange nach derartigen Beiträgen gesucht, aber selber nichts gefunden.
Ich denke das ich falsche Suchbegriffe eingegeben habe.

Danke und Gruß
Lorca

Lorca
Beiträge: 196
Registriert: Di 3. Nov 2020, 12:25

Re: Lazarus IDE Debugger

Beitrag von Lorca »

wennerer hat geschrieben:
Mi 6. Jan 2021, 17:10
Hallo Lorca,
schau mal in diesen Beitrag:
viewtopic.php?f=5&t=13111&p=116543&hili ... er#p116543

martin_frb schreibt dort:
Es gibt ein bekanntes Problem, dass beim "step over" in eine Procedure gesprungen wird (und ggf das Asm Window öffnet).
Tools > Optionen > Debugger. Dort im Property Grid: "FixIncorrectStepOver" aktivieren.
Das sollte helfen.
Viele Grüße
Bernd
Hallo wennerer, Hallo martin_frb

auch euch meinen herzlichen Dank für eure Hilfe.
m.E. schlägt Lazarus das Delphi um längen. Hier ist scheinbar jedoch noch einiges zu tun.

Danke und Gruß
Lorca

wennerer
Beiträge: 505
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Lazarus IDE Debugger

Beitrag von wennerer »

Hallo,
martin_frb schrieb:
Verwende einfach FpDebug, und stepping funktioniert.
Möchte ich natürlich jetzt auch mal testen :D
Habe zuerst das Package LazDebuggerFp installiert. Dann Werkzeuge, Einstellungen, Debugger Allgemein. Im DropDown konnte ich nun FpDebug auswählen. Muss ich da im Feld drunter einen Pfad eingeben? Da ich es nicht wusste hab ich es einfach gelassen!

FPDebug1.png
FPDebug1.png (66.03 KiB) 4020 mal betrachtet
Als ich nun Lazarus im Debugmode kompilieren ließ kam dies:
FPDebug.png
FPDebug.png (13.57 KiB) 4020 mal betrachtet
Hab dann mal die Option -Xg deaktiviert, dann macht er Halt alles in eine Datei.

Wenn ich den Default Mode nehme kommt dieses Fenster:
FpDebug2.png
FpDebug2.png (16.44 KiB) 4020 mal betrachtet
Was soll man da nehmen?

Breakpunkt setzen und Variable überwachen geht zwar aber wahrscheinlich hab ich da was nicht richtig gemacht! Kann mir jemand sagen wie es geht?

Viele Grüße
Bernd

martin_frb
Beiträge: 571
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Lazarus IDE Debugger

Beitrag von martin_frb »

Von den "dwarf...." Optionen gehen alle Drei.

Wenn Du irgendwann wieder zurück zu GDB willst, dann nimm "Dwarf (2) with sets". Oder denke dran das wieder-einzustellen, wenn Du Gdb aktivierst.

Ansonsten empfehle ich "Dwarf3".

----
Dwarf 2 vs Dwarf (2) with sets
-> Beides dwarf 2 => unterschied "set of enum" kann angezeigt werden (ist in dwarf 3 immer enthalten)

Dwarf 3
-> Identifier im Stack/Locals werden Gross/Klein angezeigt wie im Source.
-> Hier und Da etwas genauere Erkennung zwischen Pchar, array of char und ansistring.

wennerer
Beiträge: 505
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Lazarus IDE Debugger

Beitrag von wennerer »

Hallo Martin,
vielen Dank! Den Pfad usr/bin/gdb kann ich dann so stehen lassen?
Habe gerade mal im Win32 DebugMode das Crosscompilieren getestet. Kein Absturz wie sonst mit gdb. Breakpunkt gesetzt und Variable überwacht. Geht auch!
Im Konsolenfenster steht zwar

Code: Alles auswählen

(project1:19549): Gtk-[1;33mWARNING[0m **: [34m15:23:19.020[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden
darunter kommt aber die normale Ausgabe und es werden auch nicht freigegebene Objekte angezeigt. Das geht !!! Auch unter Win64debug crosscompilieren kein Absturz. Breakpunkte haben nicht angehalten. Beim Beenden des Programms kommt aber die Konsolenausgabe (wie in WIndows)!
Ich benutz den Debugger zwar nur unter Linux64 mir passsierts aber öfter das ich aus versehen mit Debugger crosscompiliere. Der lästige Absturz ist damit weg! Klasse! Ich glaube nicht das ich da zurück wechsle!
Viele Grüße
Bernd

martin_frb
Beiträge: 571
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Lazarus IDE Debugger

Beitrag von martin_frb »

fpdebug ignoriert den Pfad, weil nicht gebraucht.

Zum Cross debuggen => Das hängt vom OS ab.

Unter window geht nur 64 bit IDE und 32 bit project.
Unter windows kann eine 32 bit IDE mit fpdebug keine 64 bit app debuggen.

Unter Linux bin ich gerade nicht sicher.

Was genau ist
uch unter Win64debug crosscompilieren kein Absturz. Breakpunkte haben nicht angehalten.
Auf welchem OS?
FpDebug?
IDE 64 oder 32 bit?
Project 64 oder 32 bit?

wennerer
Beiträge: 505
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Lazarus IDE Debugger

Beitrag von wennerer »

Ich bin auf LinuxMint20 Cinnamon und Lazarus Stable 2.0.10 r64285M FPC 3.2.0 x86_64-linux-gtk2. Ich habe einen Release und Debugmode für den Crosscompiler Win64 erzeugt und mal getestet was passiert. Ich werde sicherlich nur unter Linux64 debuggen, da ich aber öfter mal beim Crosskompilieren aus versehen mit F9 kompiliere wollte ich mal sehen was bei FPDebug passiert. Da ich keinen Absturz hatte hab ich halt mal weiter getestet.
Hier bin ich auf Create Debug and Release modes:
Debugmode1.png
Debugmode1.png (24.77 KiB) 3992 mal betrachtet

Habe den Debugmode dann ausgewählt und ein kleines Programm mit F9 kompiliert. Jedefalls kein Absturz. Breakpunkte wurden ignoriert aber das Konsolenfenster nach dem Schließen des Programms kam und ein nicht freigegebenes Bitmap wurde angezeigt.
Debug2.png
Debug2.png (10.75 KiB) 3992 mal betrachtet
in Zeile 44 das bmp:
[/code]
debug3.png
debug3.png (28.74 KiB) 3992 mal betrachtet

Mei kleines Testprogramm:

Code: Alles auswählen

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;
  i : integer = 0;
implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var s   : string;
    bmp : TBitmap;
begin
  inc(i);
  s:=inttostr(i);
  inc(i);
  s:=inttostr(i);
  inc(i);
  s:=inttostr(i);
  inc(i);
  s:=inttostr(i);
  //bmp := TBitmap.Create;
end;
end.
Das gleiche mit linux32. Da geht alles. Im Konsolenfenster kommen nur zuerst einige Warnungen :

Code: Alles auswählen

Gtk-[1;32mMessage[0m: [34m17:18:21.333[0m: Failed to load module "atk-bridge"

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.335[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.335[0m: Im Modulpfad ??adwaita?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.335[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.335[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.335[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.336[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.336[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.336[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.336[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.336[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.336[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.336[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.336[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.336[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.337[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.337[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.337[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.337[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.337[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.337[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.337[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.337[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.337[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.337[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.337[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.337[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.337[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.337[0m: Im Modulpfad ??murrine?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.338[0m: Im Modulpfad ??murrine?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.338[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.338[0m: Im Modulpfad ??murrine?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.338[0m: Im Modulpfad ??murrine?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.338[0m: Im Modulpfad ??murrine?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.338[0m: Im Modulpfad ??murrine?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.338[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.338[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.338[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.338[0m: Im Modulpfad ??murrine?? konnte keine Themen-Engine gefunden werden,

(project1:22728): Gtk-[1;33mWARNING[0m **: [34m17:18:21.338[0m: Im Modulpfad ??pixmap?? konnte keine Themen-Engine gefunden werden,
Heap dump by heaptrc unit of /home/bernd/Programme/Stable_12_20/projects/Debug/project1
930 memory blocks allocated : 1628267/1630464
930 memory blocks freed     : 1628267/1630464
0 unfreed memory blocks : 0
True heap size : 589824
True free heap : 589824
debug4.png
debug4.png (50 KiB) 3992 mal betrachtet
Viele Grüße
Bernd

martin_frb
Beiträge: 571
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Lazarus IDE Debugger

Beitrag von martin_frb »

Ich nehme an das Project läuft dann unter Wine?
Und die IDE ist native 64bit Linux?

Wie wird die Window-exe dann gestartet? Linux lädt keine Windows exe, oder?
startet die IDE da vorher irgendwie Wine?


---------------------
Das Heap dump Window hat nix mit dem Debugger zu tun. Das wird von Fpc in die app einkompiliert

wennerer
Beiträge: 505
Registriert: Di 19. Mai 2015, 20:05
OS, Lazarus, FPC: Linux Mint 20 Cinnamon,Lazarus 2.2.6 (rev lazarus_2_2_6) FPC 3.2.2 x86_64-linux-
CPU-Target: x86_64-linux-gtk2

Re: Lazarus IDE Debugger

Beitrag von wennerer »

Ja läuft unter wine und die Ide ist native Linux64
Diese Einstellung startet die exe in wine:
debug5.png
debug5.png (75.96 KiB) 3978 mal betrachtet
Viele Grüße
Bernd

martin_frb
Beiträge: 571
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Lazarus IDE Debugger

Beitrag von martin_frb »

Das kann man auch unter "Run" > "Run Parameter" einstellen.

Das problem für den Debugger ist, das die IDE (und damit der Debugger) wine startet. Das heißt der Debugger will Wine debuggen. Und das geht nicht.


Um das zu debuggen, müsste man irgendwie remote debuggen. Und wahrscheinlich müsste die IDE angepasst werden.
Der start müsste dann (mit erweiterter/veränderter IDE) irgendwie
1) im debugger path
wine c:\path\gdb

2) im run > run param // oder debugger settings / nicht sicher
wine c:\path\gdbserver project
oder
wine c:\path\gdbserver

und dann via remote debugger und gdb verbinden.....

ABer derzeit geht das nicht....

Derzeit kannst du under wine, per hand den gdbserver starten.
Und dann in der IDE Gdbmi_SErver debugger

PascalDragon
Beiträge: 823
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Lazarus IDE Debugger

Beitrag von PascalDragon »

martin_frb hat geschrieben:
Sa 9. Jan 2021, 22:34
Derzeit kannst du under wine, per hand den gdbserver starten.
Und dann in der IDE Gdbmi_SErver debugger
Laut dem Wine Developer's Guide könnte es gehen statt gdb als Debugger winedbg mit Parameter --gdb anzugeben (hab's aber nicht getestet).
FPC Compiler Entwickler

Antworten