Exception und Programm hängt - aber wo?

Rund um die LCL und andere Komponenten

Exception und Programm hängt - aber wo?

Beitragvon Timm Thaler » 23. Feb 2019, 12:49 Exception und Programm hängt - aber wo?

Ich habe auf dem Raspi ein Programm, welches Kamerabilder von einer IP Cam abruft und als Zeitraffer zusammenstellt. Das Programm hängt immer mal und muss dann per Ctrl-C beendet werden.

Nun habe ich es unter Laz 2.0.1 und FPC 3.2.0 mit Debugger laufen. Das Programm hängt wieder, aber es kommt keine Fehlermeldung. Wenn ich es stoppe und Einzelschritt mache, zeigt mir die Assembler-Ansicht, dass ein Befehl 00010C60 000000ef svc 0x00000000 ausgeführt wird, offenbar eine Exception - und das Programm hängt wieder, ich stoppe es, mache Einzelschritt, es steht wieder exakt an der gleichen Stelle. Laut Assembler passiert das in SYSTEM_$$_FPSYSCALL$crc26E42702.

Da der Fehler selten und sporadisch auftritt, lasse ich das Programm jetzt mal so stehen und hoffe, ihr könnt mir sagen wie ich rausbekomme, was den Fehler verursacht und wie ich rausbekomme wo der Fehler verursacht wird.
Timm Thaler
 
Beiträge: 970
Registriert: 20. Mär 2016, 23:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon af0815 » 23. Feb 2019, 17:38 Re: Exception und Programm hängt - aber wo?

Schon mal den Stacktrace angeschaut, da solltest du die Aufruhierachie sehen.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3740
Registriert: 7. Jan 2007, 11:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon Timm Thaler » 23. Feb 2019, 19:17 Re: Exception und Programm hängt - aber wo?

Habs jetzt, das sieht so aus:

Code: Alles auswählen
#0 SYSTEM_$$_FPSYSCALL$crc26E42702 at :0
#1 SOCKETS_$$_FPRECV$LONGINT$POINTER$LONGWORD$LONGINT$$LONGINT at :0
#2 SSOCKETS$_$TSOCKETHANDLER_$__$$_RECV$formal$LONGINT$$LONGINT at :0
#3 SSOCKETS$_$TSOCKETSTREAM_$__$$_READ$formal$LONGINT$$LONGINT at :0
#4 FPHTTPCLIENT$_$TFPCUSTOMHTTPCLIENT_$_READRESPONSE$TSTREAM$array_of_LONGINT$BOOLEAN$$BOOLEAN_$$_TRANSFER$crc6B70A58D at :0
#5 FPHTTPCLIENT$_$TFPCUSTOMHTTPCLIENT_$__$$_READRESPONSE$TSTREAM$array_of_LONGINT$BOOLEAN$$BOOLEAN at :0
#6 FPHTTPCLIENT$_$TFPCUSTOMHTTPCLIENT_$__$$_DONORMALREQUEST$crcA46C7035 at :0
#7 FPHTTPCLIENT$_$TFPCUSTOMHTTPCLIENT_$__$$_DOMETHOD$ANSISTRING$ANSISTRING$TSTREAM$array_of_LONGINT at :0
#8 FPHTTPCLIENT$_$TFPCUSTOMHTTPCLIENT_$__$$_HTTPMETHOD$ANSISTRING$ANSISTRING$TSTREAM$array_of_LONGINT at :0
#9 GETIMAGEDATA({UHOST = 0x76e0811c '...


Aber wieso kommt das Programm aus dem Aufruf nicht mehr raus?

Die aufrufende Routine sieht so aus:

Code: Alles auswählen
function GetImageData(var acam : Twebcam; var aauth : Tauth; const data : TMemoryStream) : integer;
var
  hcli : TFPHTTPClient;
begin
  GetImageData := 0;
  hcli := TFPHTTPClient.Create(nil);
  try
    try
      hcli.AddHeader('User-Agent','Mozilla/5.0 (compatible; fpweb)');
      if aauth.nonce <> '' then begin  // prüfen ob bereits Parameter für Auth von Kamera erhalten
        hcli.AddHeader('Authorization', GetAuthString(acam, aauth));
      end;
      data.Clear;
      hcli.HTTPMethod('GET', acam.uhost + acam.upath, data, [200, 400, 401, 403, 404]);
      if hcli.ResponseStatusCode = 401 then begin  // wenn Auth gefordert
        SetAuthData(aauth, hcli.ResponseHeaders.Values['www-authenticate']);
      end;
      data.Position := 0// Stream auf Anfang
      GetImageData := hcli.ResponseStatusCode;
    except
      on E: Exception do begin
        if acam.error <> ehttp then begin
          log.message('Fehler bei Verbindung: ' + E.Message);
          acam.error := ehttp;  // Fehler http merken
        end;
      end;
    end;
  finally
    hcli.Free;
  end;
end;       


Da wird also versucht, ein Bild zu laden, wenn noch nicht authentifiziert, wird die Auth gesendet, ansonsten das Bild in den Speicher geladen. Bei Fehlern sollte eine Fehlermeldung kommen. Das funktioniert soweit auch, wenn die Kamera immer mal nicht erreichbar ist. Aber manchmal bleibt das Programm hängen und es hilft nur ein Kill.
Timm Thaler
 
Beiträge: 970
Registriert: 20. Mär 2016, 23:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded | 
CPU-Target: Raspberry Pi 3
Nach oben

Beitragvon pluto » 23. Feb 2019, 20:45 Re: Exception und Programm hängt - aber wo?

ich würde mal in dieser Procedure überall ein writeln machen damit du siehst, bei welcher Zeile das Problem auftritt.

Was ist wenn hcli.ResponseHeaders.Values['www-authenticate'] fehlschlägt?
MFG
Michael Springwald
Aktuelles Projekt: ContentManager2(Ehmals NoteManager2).
pluto
Lazarusforum e. V.
 
Beiträge: 6998
Registriert: 19. Nov 2006, 13:06
Wohnort: Oldenburg(Oldenburg)
OS, Lazarus, FPC: Linux Mint 19.2 | 
CPU-Target: AMD
Nach oben

• Themenende •

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried