ZEOS und GDB: TZConnection.Connect hängt

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Dets
Beiträge: 61
Registriert: Di 11. Sep 2007, 16:59
OS, Lazarus, FPC: Ubuntu Maverick (L 0.9.28.2-10, FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Lage
Kontaktdaten:

ZEOS und GDB: TZConnection.Connect hängt

Beitrag von Dets »

Ich habe hier gerade einen lustigen Effekt: wenn ich in der IDE unter Options den GNU-Debugger einschalte (damit mein Programm an Breakpoints stoppt) dann bleibt es bei TZConnection.Connect hängen (Endlosschleife), schalte ich den Debugger hingegen auf (none), dann wird die Verbindung problemlos hergestellt und das Programm läuft weiter (aber leider stoppt die IDE nicht mehr an Breakpoints).
Hat jemand schon mal etwas ähnliches beobachtet und hat einen Workaround?

Datenbank ist eine nicht lokale MySQL5, ZEOSDBO hat die Version 6.6.5, eine Gegenprobe mit Lazarus 0.9.27b unter Intrepid zeigt denselben Fehler.

TIA, Dets ...

Dets
Beiträge: 61
Registriert: Di 11. Sep 2007, 16:59
OS, Lazarus, FPC: Ubuntu Maverick (L 0.9.28.2-10, FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Lage
Kontaktdaten:

Re: ZEOS und GDB: TZConnection.Connect hängt

Beitrag von Dets »

Nachtrag: ein kleiner Codeschnipsel:

Code: Alles auswählen

var
  Database: TZConnection;
begin
  Database:=TZConnection.Create(nil);
  Database.Protocol:='mysql-5';
  Database.Database:='test';
  Database.User:='root';
  Database.Password:='root';
  Database.HostName:='192.168.94.94';
 
  writeln('Trying to connect ...');
  Database.Connect;
  writeln('Connected!');

piper62
Beiträge: 131
Registriert: Sa 5. Apr 2008, 17:57
OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
CPU-Target: 32Bit/64Bit
Wohnort: Ulm

Re: ZEOS und GDB: TZConnection.Connect hängt

Beitrag von piper62 »

das hatte ich bislang noch nicht.
Wir arbeiten regelmässig mit dem Debugger und auch mit Zeos und MySQL.

Wie sieht es denn aus wenn Du eine Form in der IDE erzeugst und darauf die ZConnection zur Laufzeit legst und dann im Objekispektor die Parameter füllst und die ZConnection auf Active setzt?

Friert dann auch Alles ein?

Gruss,
Piper

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

Re: ZEOS und GDB: TZConnection.Connect hängt

Beitrag von theo »

Ist da irgendwie Multithreading im Spiel?

Dets
Beiträge: 61
Registriert: Di 11. Sep 2007, 16:59
OS, Lazarus, FPC: Ubuntu Maverick (L 0.9.28.2-10, FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Lage
Kontaktdaten:

Re: ZEOS und GDB: TZConnection.Connect hängt

Beitrag von Dets »

piper62 hat geschrieben:Wie sieht es denn aus wenn Du eine Form in der IDE erzeugst und darauf die ZConnection zur Laufzeit legst und dann im Objekispektor die Parameter füllst und die ZConnection auf Active setzt?
Ich musste grad mal die ZEOS-Komponenten installieren und Lazarus neu kompilieren ...

Ergebnis: funktioniert. Die Daten werden im Grid angezeigt und auch Breakpoints lassen sich setzen!

Seltsam!

Dets ...

Dets
Beiträge: 61
Registriert: Di 11. Sep 2007, 16:59
OS, Lazarus, FPC: Ubuntu Maverick (L 0.9.28.2-10, FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Lage
Kontaktdaten:

Re: ZEOS und GDB: TZConnection.Connect hängt

Beitrag von Dets »

theo hat geschrieben:Ist da irgendwie Multithreading im Spiel?
Nein, der Fehler tritt auch auf, wenn du einfach eine neue Konsolenanwendung erzeugst und meinen Codeschnipsel in "DoRun" kopierst.

Dets ...

Dets
Beiträge: 61
Registriert: Di 11. Sep 2007, 16:59
OS, Lazarus, FPC: Ubuntu Maverick (L 0.9.28.2-10, FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Lage
Kontaktdaten:

Re: ZEOS und GDB: TZConnection.Connect hängt

Beitrag von Dets »

Neue Erkenntnisse:

der Fehler tritt nur in einem Konsolenprogramm auf - wenn ich meinen Codeschnipsel in eine Lazarus-Application einbaue, dann funktionierts.

:? Dets ...

Dets
Beiträge: 61
Registriert: Di 11. Sep 2007, 16:59
OS, Lazarus, FPC: Ubuntu Maverick (L 0.9.28.2-10, FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Lage
Kontaktdaten:

Re: ZEOS und GDB: TZConnection.Connect hängt

Beitrag von Dets »

theo hat geschrieben:Ist da irgendwie Multithreading im Spiel?
Ich nehme alle zurück und behaupte das Gegenteil:
wenn ich Lazarus als root per Kommandozeile starte, dann wirft er mir auf der Konsole folgende Texte aus:
[Debugger] Console output: ~"[Thread debugging using libthread_db enabled]\n"
[Debugger] Log output: &"Error while reading shared library symbols:\n"
[Debugger] Log output: &"Cannot find new threads: generic error\n"
[Debugger] Log output: &"Cannot find new threads: generic error\n"
[WARNING] Debugger: unexpected result-record: ^error,msg="Cannot find new threads: generic error"
Das Problem scheint aber bei Zeos zu liegen: ich habe hier 2 Zeos-Libs, die behaupten, dieselbe Versionsnummer zu haben (6.6.2-RC). Eine von beiden bekomme ich unter Lazarus 0.9.25b zum Laufen, die andere nicht. Unter Lazarus 0.9.26-2 laufen beide nicht :(

Nachtrag: ich bin mal durch den Zeos-Source gesteppt. Es klemmt in ZCompatibility.pas in Zeile 208:

Code: Alles auswählen

function LoadLibrary(ModuleName: PChar): HMODULE;
begin
  Result := HMODULE(dlopen(Modulename, RTLD_GLOBAL));
end;
Modulename ist in beiden Fällen libmysqlclient.so.15, die existiert auch auf dem System. Jetzt bin ich mit meinem Latein (bzw. Pascal) auch am Ende.

greetz, Dets ...

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: ZEOS und GDB: TZConnection.Connect hängt

Beitrag von monta »

Wieso hast du denn die 6.6.2 und nicht die aktuelle stable?

Ich kann nur sagen, das die 6.6.5 gut läuft unter aktuellen Lazarusversionen. Außerdem ist die ja auch als stable gekennzeichnet.
Johannes

Dets
Beiträge: 61
Registriert: Di 11. Sep 2007, 16:59
OS, Lazarus, FPC: Ubuntu Maverick (L 0.9.28.2-10, FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Lage
Kontaktdaten:

Re: ZEOS und GDB: TZConnection.Connect hängt

Beitrag von Dets »

monta hat geschrieben:Wieso hast du denn die 6.6.2 und nicht die aktuelle stable?
Das war der Ausgangspunkt: mein Konsolen-Programm, was ich vor einiger Zeit entwickelt habe und einer Weiterentwicklung bedarf, ließ sich unter Lazarus 0.9.26-2/Jaunty/Zeos6.6.5 nicht debuggen. Ich war mir aber sicher, dass ich es damals debuggen konnte, deswegen habe ich als erstes nach einer älteren Version von Zeos gesucht und die 6.6.2 gefunden. Nachdem das auch nicht funktioniert hat, habe ich meine VM mit Lazarus 0.9.25b/Hardy/Zeos6.6.2 gestartet und damit lief es. Allerdings nicht, wenn man die Zeos6.6.5 benutzt.

BTW, gestern mal auf meinem eigenen PC getestet unter Lazarus0.9.26-4/Jaunty/Zeos6.6.5: läuft ebenfalls nicht. Deswegen habe ich überlegt, ob ich mein Programm auf SQLdb umstellen soll und habe das mal getestet: läuft ebenfalls nicht!

*arghhhh* Dets ...

Dets
Beiträge: 61
Registriert: Di 11. Sep 2007, 16:59
OS, Lazarus, FPC: Ubuntu Maverick (L 0.9.28.2-10, FPC 2.4.0)
CPU-Target: 32Bit
Wohnort: Lage
Kontaktdaten:

Re: ZEOS und GDB: TZConnection.Connect hängt

Beitrag von Dets »

So, ich hab mir jetzt einen Workaround gebastelt: per Kommandozeilenswitch kann ich dem Compiler jetzt mitteilen, ob er mein Programm als Konsolenanwendung kompilieren soll oder als GUI-Anwendung mit einem Dummy-Formular:

Code: Alles auswählen

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  {$IFDEF DEBUG}
  Interfaces // this includes the LCL widgetset
  , Forms
  { you can add units after this }, LResources,
  {$ENDIF}
  uMyApp;
 
{$IFDEF WINDOWS}{$R zeosidetest2.rc}{$ENDIF}
 
{$IFDEF DEBUG}
type
  TDummyForm = class(TForm)
  protected
    procedure DoShow; override;
  end;
 
procedure TDummyForm.DoShow;
var
   App: TMyApp;
begin
     inherited;
     App:=TMyApp.Create;
     App.Run;
     Application.Terminate;
end;
 
var
  DummyForm: TDummyForm;
{$ELSE}
var
  App: TMyApp;
{$ENDIF}
begin
  {$IFDEF DEBUG}
  {$I zeosidetest2.lrs}
  Application.Initialize;
  Application.CreateForm(TDummyForm, DummyForm);
  Application.Run;
  {$ELSE}
  App:=TMyApp.Create;
  App.Run;
  {$ENDIF}
end.
greetz, Dets ...

Antworten