ich habe ein Programm geschrieben das per TCP Socket eine Verbindung zu einem "Meßgerät aufbaut.
Wenn ich nun ein schnelles Auslesen (< 1 Sekunde) mache stützt das Programm ab. Es häng sich auf ...wo ??
Ich habe nun einen "Watchdog" geschrieben der in einer Schleife regelmäßig den "Alarm" zurücksetzt und nach 5 Sekunden ohne Rücksetzung das Programm abbricht.
Was gibt es in Perl für Möglichkeiten zur Fehleranalyse. Debugger ist klar .. jedoch keine eventuell speziel nötigen Einstellungen.
Gruß
piet
Last edited: 2015-02-27 21:25:37 +0100 (CET)
jan
2015-02-27 22:53
User since 2003-08-04
2536
Artikel ModeratorIn
Was tut's denn - hängt es sich auf oder stürzt es ab? Wird das Programm beendet oder reagiert es nur nicht mehr und wird nicht fertig?
Auf welchem OS lässt Du es laufen?
Hast Du ev einen hohen Timeout bei der TCP-Verbindung und die wird nicht aufgebaut?
Oder wird sie aufgebaut und Du willst von der der Socket lesen, da kommt aber nichts?
Kannst Du eine zusammengedampfte Version posten, die das Wesentliche enthält und dein Problem demonstriert?
+9 replies
GwenDragon
2015-02-28 08:21
User since 2005-01-17
14760
Artikel Admin1
Sich in einer Schleife totlaufen oder hängen, weil es auf etwas wartet, der Socket blockiert oder das Zielgerät nix sendet, ist kein Absturz.
Wie deine Kommunikation mit dem Gerät nun läuft, bleibt uns ein Rätsel.
Wenn du wissen willst, wie/ob überhaupt Traffic stattfindet, verwende Wireshark und filtere die Pakete nach der IP des Ziels.
Hallo,
ja schuldig ....das waren nicht nur wenige, sonder keine Infos von mir.
1. Linux
2. programm läuft normal, nach ca. 50-400 Schleifendurchläufen (Zähler auf Konsole) je nach Wartezeit 250ms ...1 Sekunde in Schleife.
3. ich vermute es liegt an der Socketverbindung. Diese blockiert, eigentlich nicht den ich habe in der Deklaration vom Socketverbindung einen Timeouts mit eingetragen. Wireshark ist sicher eine gute Idee, werde ich testen.
Danke
piet Last edited: 2015-02-28 09:36:39 +0100 (CET)
+7 replies
betterworld
2015-02-28 09:38
User since 2003-08-21
2614
Artikel ModeratorIn
Wireshark ist gut, außerdem würde ich da strace probieren.
Unter MacOS X gibt's aber ähnliche Möglichkeiten: dtruss(1m)
Ach ja, für Windows gibt's natürlich auch Möglichkeiten: Zum einen kann man mit Debugging Tools for Windows - Logger arbeiten, zum anderen gibt's mit STraceNT sowas ähnliches wie Linux' ltrace.
Last edited: 2015-02-28 16:15:33 +0100 (CET)
When C++ is your hammer, every problem looks like your thumb.
+4 replies
betterworld
2015-02-28 16:43
User since 2003-08-21
2614
Artikel ModeratorIn
Laut OP ist es Linux :)
Edit: root braucht man übrigens nicht, oder? Für Wireshark braucht man root, aber für strace nicht (nur manchmal beim Attachen von Fremdprozessen, oder wenn man setuid-Sachen ausführt).
Last edited: 2015-02-28 16:44:56 +0100 (CET)
Wireshark brachte die Lösung .... obwohl ich schon Wireshark benutzt habe, kam ich nicht auf die Idee diese hier zu verwenden.
(AufderLeitungsitzender)
piet
Last edited: 2015-03-03 09:04:38 +0100 (CET)
Linuxer
2015-03-03 11:05
User since 2006-01-27
3890
Artikel HausmeisterIn
Könntest Du die Lösung hier darstellen, damit vielleicht andere davon profitieren können, wenn sie diesen Thread mal finden?
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!