Prozess beendet sich

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,
    habe in der Eclipse einen C++ Prozess mit mehreren Threads geschrieben. Einer der Threads sendet regelmäßig über das Netzwerk Daten. Das ganze läuft problemlos über mehrere Tage bis der Threads beendet wird. Man sieht noch die richtigen Trace Ausgaben meiner Applikation aber es erscheint kein Hinweis auf einen Fehler. Hat jemand eine Idee was los sein könnte.

    Gruß Memsaver

    • Offizieller Beitrag

    Ohne Quellcode? Nein. Wer in der Lage ist multithreaded Programme zu schreiben sollte doch auch in der Lage sein sich ein paar Zusätzliche Logs mit ausgeben zu lassen ;)

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Hallo Memsaver,

    immer wenn ich Probleme in Verbindung mit Netzwerk lese, denke ich sofort an "das Mysterium".

    Suche mal innerhalb dieses Forums genau danach.

    Dort gibt es einen Thread, in dem eine Software-Lösung vorgestellt wird - ein anderer Thread diskutiert Ursachen.

    Solltest Du feststellen, dass "das Mysterium" auch bei Dir zugeschlagen hat, dann willkommen im Club!

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo,
    letztlich ging meine Frage genau in die Richtung. Mit welchem Tooling kann ich das Problem besser untersuchen d.h. wie siehts mit dem Speicher aus usw. Muss man Valgrind extra installieren?
    Gruß
    memsaver

    Hallo dbv,
    das hatte ich nur am Rande erwähnt. Natürlich schreibt mein Programm ständig Traces auf die Console. Es logt sogar Daten in ein File. Aber irgendwann hört es einfach auf. Den Quellcode zu zeigen wäre kein Problem, es sind halt etliche LOC's die ich hier reinkopieren müsste und wäre wahrscheinlich sehr mühselig zu analysieren.

    Gruß memsaver

    Einmal editiert, zuletzt von memsaver (18. Mai 2014 um 19:40)

  • ... und ein Speicherplatzproblem (RAM, SDcard oder ggf. Disk) nach offenbar mehreren Tagen problemlosem Lauf kann ausgeschlossen werden?

    Gruß, mmi

  • Hallo

    Zitat

    Ja ich habe eine Idee: Memory-Leak.

    Gute Idee..kann ich nur bestätigen
    Mit genau diesem Problem (geht lange gut, bis was abbricht, aber mitgeschriebene log-Files
    sagen nichts), hab ich mal Tage gekämpft.
    Ein Tipp von hier ,auch "valgrind", das Tool hat mir geholfen.
    Hab damit ein Memory-leak gefunden.

    Gruß root

    Einmal editiert, zuletzt von root (19. Mai 2014 um 05:55)

  • Ja ein Speicherproblem hätte ich auch vermutet. Aber wird in Linux ein Prozess einfach so ohne Fehlermeldung beendet? Was gibt es in Linux für Tools um den aktuellen freien Memory aber auch den verbliebenen SD Speicherkarten bereich anzusehen?

    Danke memsaver

  • Hallo.

    Zitat

    Aber wird in Linux ein Prozess einfach so ohne Fehlermeldung beendet? Was gibt es in Linux für Tools um den aktuellen freien Memory


    Da kann ich nur aus meiner Erfahrung sprechen.
    Der Prozess wurde bei mir nicht beendet, er wurde einfach wegen fehlendem Speicher nicht mehr ausgeführt und ich hab dumm gekuckt.
    Ich habe dann meine Applikation gestartet, mich dann parallel per RDP zugeloggt, und habe mit "free -m" das freie ram beobachtet, da bin ich dann dahintergestiegen.
    Mit valgrind (etliche mögliche startparameter) hab ich den Übeltäter gefunden.

    Tools... siehe oben, aber da gibt es sicherlich mehr.
    Gruß root

    Einmal editiert, zuletzt von root (19. Mai 2014 um 08:27)

  • Wenn der Speicher überläuft oder auf falsche Speicherstellen zugegriffen wird kann es unterschiedlichste Ergebnisse haben, weil das Programm in dem Moment völlig zufällige Daten hat. Meistens bekommt man einen Segmentation Fault. Aber nur wenn man versucht auf geschützte Speicherzellen zuzugreifen. Wenn man Pech hat, dann greift man auf Stellen zu, auf die man zugreifen darf, die man aber nicht meinte, und hat einfach nur komische Dinge. Bei einem Speicherleck (Memory Leak) türmt sich irgendwo im RAM Speicher auf weil irgendetwas nicht gelöscht wird, was aber nicht mehr gebraucht wird.
    Faszinierend, dass solche absolut gängigen Fehler hier als "Mysterium" gehandelt werden.
    Ja valgrind musst du installieren (geht über apt-get), Benutzung ist einfach (hat VIELE plugins etc, du brauchst nur die Reinform, google hilft notfalls). Das Ergebnis interpretieren ist nciht ganz so einfach, aber versuche es ersteinmal selbst bevor du fragst. Nur so lernst du auch.

    Ein MemoryLeak kann man übrigens fast nicht mit Ausgaben debuggen, die Aussage man solle solch einen Fehler so suchen ist also Müll. Ob SD/Disk vollläuft??? Dann könnte er es wohl nicht nochmal starten, oder??? bzw wäre es danach sehr schnell wieder aus. Ob RAM vollläuft, habe ich nicht genau das vermutet?

  • Hallo Horroreyes,
    ob RAM vollläuft sollte ich mal genauer untersuchen. Habe den Prozess schon mal ohne den Msg_queues zwischen den threads laufen lassen, über mehrere Tage und es ging alles gut. Der nächste Schritt wäre dann wohl das Valgrind zu installieren. Were mich mal infoermieren wie das Tool funktioniert. Melde mich wieder wenn es was neues gibt. Aber vielen Dank.

    Gruß memsaver

  • Hallo

    Die Aussage:

    Zitat

    Ein MemoryLeak kann man übrigens fast nicht mit Ausgaben debuggen, die Aussage man solle solch einen Fehler so suchen ist also Müll.

    ...finde ich doch schon sehr gewagt.
    1. ich habe nie behauptet, dass valgrind ein Allheilmittel ist, und man alles damit findet.
    2. ich habe zudem darauf hingewiesen, dass das eines von x-Tools ist.
    Mir hat es geholfen.
    valgrind wird mit sicherheit nicht hergehen und sagen....."in dieser oder jener Prozedur ist ein Memory-leak".
    Da heist es dann, wie du richtig erwähnst, die Ausgaben von valgrind richtig zu interpretieren.

    Außerdem frage ich mich dann...
    Warum rätst tu dann dennoch... guck dir valgrind an, ...aber das braucht Übung....

  • Ähm, du hast mich falsch verstanden. valgrind ist genau für diesen Fall gedacht, daher habe ich es empfehlen, Was ich aber sagen wollte: Ein MemoryLeak kann man übrigens fast nicht mit KONSOLEN-Ausgaben debuggen. Und das fast ist bitte auch zu bemerken. Natürlich ist es möglich, aber eigentlich muss man schon wissen, dss man ein Memory-Leak sucht um es mit Konsolenausgaben zu finden...

    [edit]
    Jetzt fühle ich mich noch verpflichtet deutlich zu machen, dass ich damit NICHT sagen will, dass Konsolenausgeban nciht zum debuggen taugen, sondern lediglich, dass DIESE Fehlerart zu denen gehört die man mit Konsolenausgaben kaum herausfindet.
    Konsolenausgaben sind eine Prima Methode für ein schnelles erstes Suchen. Einen guten Debugger zu beherrschen ist jedoch meistens noch effizienter (Wenn die Konsolenausgane nicht beim ersten Anlauf hilft^^)
    [/edit]

    Einmal editiert, zuletzt von Horroreyes (20. Mai 2014 um 14:26)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!