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.
Exception und Programm hängt - aber wo?
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
- af0815
- Lazarusforum e. V.
- Beiträge: 6766
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
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).
-
- Beiträge: 1224
- Registriert: So 20. Mär 2016, 22:14
- OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
- CPU-Target: Raspberry Pi 3
Re: Exception und Programm hängt - aber wo?
Habs jetzt, das sieht so aus:
Aber wieso kommt das Programm aus dem Aufruf nicht mehr raus?
Die aufrufende Routine sieht so aus:
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.
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 '...
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;
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
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?
Was ist wenn hcli.ResponseHeaders.Values['www-authenticate'] fehlschlägt?
MFG
Michael Springwald
Michael Springwald