Bedingter Haltepunkt.

Für Fragen rund um die Ide und zum Debugger
Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Bedingter Haltepunkt.

Beitrag von fliegermichl »

Nee klappt irgendwie nicht.

Ich hab in meinem Testprogrämmelchen eine Methode Testename : boolean deklariert. Die prüft die Bedingung und gibt entsprechend true oder false zurück.

Wenn ich im gdb b unit1.pas:46 if testename
eingebe, dann meckert er:

Code: Alles auswählen

 
warning: can't find linker symbol for virtual table for `TFORM1' value
Error in testing breakpoint condition:
Cannot take address of method TESTENAME
 


Wenn ich testename als einfache Function deklariere, dann hält er einfach an ohne Fehlermeldung und ohne testename aufzurufen.
Mein Fazit ist ehrlich gdb ist Mist.
In meinem uralten Delphidebugger kann ich "Funktionsaufrufe erlauben" anklicken und praktische jede Methode oder procedure oder function in der Bedingung aufrufen.
Ich kann jede Property / Variable usw. einsehen und auch "on the fly" ändern.

Dee
Beiträge: 54
Registriert: Do 10. Jul 2014, 20:56
OS, Lazarus, FPC: Windows 10 Pro 64-bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: Ryzen 5 2600

Re: Bedingter Haltepunkt.

Beitrag von Dee »

@fliegermichl

Vielleicht hilft dir folgendes weiter:

Accessing a symbol in a specific unit unitname.identifier
http://wiki.freepascal.org/Debugging_-_GDB_tricks#Accessing_a_symbol_in_a_specific_unit_unitname.identifier

Vielleicht kann man damit auch eigene Funktionen einbinden und aufrufen.

-- Dee

Frank Ranis
Beiträge: 201
Registriert: Do 24. Jan 2013, 21:22

Re: Bedingter Haltepunkt.

Beitrag von Frank Ranis »

Hi,

habe auch rumprobiert und mit einfachen Prüf-Variablen wie (Integer, Char oder Boolean) funzt die Haltebedingung ja gut.

Und dann habe ich mir was mit Boolean gebaut.

Gruß

Frank

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
 Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls,
 lazutf8;
 
type
 
 { TForm1 }
 
 TForm1 = class(TForm)
   Edit1: TEdit;
  procedure Edit1Change(Sender: TObject);
 private
 public
 end;
 
var
 Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Edit1Change(Sender: TObject);
var check1,check2,check3,check4:boolean;
begin
 // man macht sich hier ein paar Bedingungen und legt diese auf die
 // Boolean-Variablen check1 ... check4
 check1:=Edit1.text='blabla1';
 check2:=Edit1.text='blabla2';
 check3:=Edit1.text='blabla3';
 check4:=Edit1.text='blabla4';
 
 // Die Haltepunktbedingung ist dann schlicht 'check1=true' oder noch einfacher 'check1'
 sleep(0)// Hier anhalten , wenn edit1.text='blabla1' , Haltepunkt-Bedingung 'check1=true'
 sleep(0)// Hier anhalten , wenn edit1.text='blabla2' , Haltepunkt-Bedingung 'check2=true'
 sleep(0)// Hier anhalten , wenn edit1.text='blabla3' , Haltepunkt-Bedingung 'check3=true'
 sleep(0)// Hier anhalten , wenn edit1.text='blabla4' , Haltepunkt-Bedingung 'check4=true'
end;
 
end.
 


Äh ,doof , im Highlighter sind die Haltepunkte nicht zu sehen.
Hier noch ein Bild .

Bild_Haltepunkte.png
www.flz-vortex.de

martin_frb
Beiträge: 572
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: Bedingter Haltepunkt.

Beitrag von martin_frb »

Kurz gegoogled:
https://sourceware.org/gdb/current/onli ... ience-Funs

$_streq(^char(a), "abccc")

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1430
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Bedingter Haltepunkt.

Beitrag von fliegermichl »

martin_frb hat geschrieben:Kurz gegoogled:
https://sourceware.org/gdb/current/onli ... ience-Funs

$_streq(^char(a), "abccc")


Geht leider auch nicht. Der GDB bleibt auch dann stehen wenn ein anderer Inhalt in a steht.

martin_frb
Beiträge: 572
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: Bedingter Haltepunkt.

Beitrag von martin_frb »

Ging bei mir...

1) Dwarf. (32bit ist default stabs.)

2) Getestet mit gdb 8.2 (Auf der Lazarus Sourceforge Seite)

Dee
Beiträge: 54
Registriert: Do 10. Jul 2014, 20:56
OS, Lazarus, FPC: Windows 10 Pro 64-bit, Lazarus 2.0.10, FPC 3.2.0
CPU-Target: Ryzen 5 2600

Re: Bedingter Haltepunkt.

Beitrag von Dee »

martin_frb hat geschrieben:Ging bei mir...

1) Dwarf. (32bit ist default stabs.)

2) Getestet mit gdb 8.2 (Auf der Lazarus Sourceforge Seite)

Funktioniert bei mir nicht. Wie hast du es konkret gemacht?

Beschreibung der Funktion $_streq(str1, str2):

"Returns one if the strings str1 and str2 are equal. Otherwise it returns zero."

Bei UTF8CompareStr() wäre es ja genau umgekehrt.

Wenn ich es mit String-Konstanten im Debugger mit $_streq() ausprobiere, meckert er und meint, dass die Parameter einen unültigen Typ haben.

Edit: @Frank Ranis: Danke übrigens, für deinen Beitrag. Eine abgewandelte Form meiner Lösung, aber dennoch vielleicht hilfreich.

-- Dee

martin_frb
Beiträge: 572
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: Bedingter Haltepunkt.

Beitrag von martin_frb »

Die String Konstante, muss in double quotes. "abc"

Ich kann es nochmal genauer testen... Bin aber erst mal ein paar Tage weg.

martin_frb
Beiträge: 572
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: Bedingter Haltepunkt.

Beitrag von martin_frb »

OK wahrscheinlich bissel spät....

Aber

1) Übergibst Du direkt ne string (oder pchar) variable an $_streq() ?

Oder sowas wie in dem ersten Post: element^.name
Was ist element?
Gdb han manchmal Schwierigkeiten mit solchen Pointer derefs. Da kann es sein das er den Wert anzeigt, aber den Wert nicht weiter nutzen kann....

2) In svn trunk: fpDebug sollte jetzt String vergleiche können.

Antworten