So beheben Sie den Segmentierungsfehler (Core Dumped)


15

Ich benutze Ubuntu 14.04.

Nach der Installation einiger Anwendungen trat ein Segmentierungsfehler (Core Dumped) auf.

Was bedeutet es ? Wie kann ich dieses Problem beheben?

Zum Beispiel :

Nach der Installation von Chrome-Stable tritt beim Starten über das Terminal dieser Fehler auf.


Einige Binärprogramme sind abgestürzt, dies ist jedoch sehr spezifisch für das abgestürzte Programm. Möglicherweise müssen Sie uns mitteilen, welches Programm dies produziert hat, und Sie können versuchen, es zu aktualisieren.
Kwaadpepper


1
Da es sich um eine geschlossene Quelle handelt, sollten Sie einen Fehlerbericht an Onkel GooGle richten!
user.dz

1
Good SH :) Ich werde Onkel fragen; P
Ravan

1
Versuchen Sie, die Einstellungen und den Cache zu entfernen sudo rm -rf ~/.config/google-chrome ~/.cache/google-chrome. Führen Sie es dann im Inkognito-Modus ausgoogle-chrome --incognito
user.dz

Antworten:


12

Was bedeutet es?

Siehe AU: Was ist ein Segmentierungsfehler? und auch das was einige Beispiele hat wie man es reproduziert, SO: Was ist ein Segmentierungsfehler? . Die einfachste Beschreibung, mit der ich kommen kann (ist möglicherweise nicht die perfekte):

Das Programm hat versucht, auf einen Speicherbereich außerhalb seines eigenen Abschnitts zuzugreifen. Betriebssystem blockiert es.

Einige Fälle: Wert mit initialisiertem Zeiger lesen, Bereichsüberschreitung in einem Array, Funktionsaufruf (wenn Abwärtskompatibilität nicht beibehalten wird), ...

Es ist jedoch nicht immer einfach, die Ursache bei großen Programmen oder solchen, die auf anderen Projektbibliotheken basieren, zu finden. In den meisten Fällen wird ein Fehlerbericht erstellt, entweder für das Zielprogramm oder für eines, wenn es von den Abhängigkeiten abhängt (entweder für das vorgelagerte Projekt oder das nachgelagerte Distributionspaket).

Wie kann ich dieses Problem beheben?

Wenn Sie keine benutzerdefinierte Konfiguration / Einrichtung vorgenommen und alle Updates installiert haben. Fehlerbericht auslösen , siehe Wie melde ich einen Fehler?

Wenn Open Source von Ubuntu unterstützt wird, benutze ubuntu-bug( apport-bug). Überprüfen Sie für geschlossene Quellen von Drittanbietern deren Hilfeseiten, wie Fehler gemeldet und zugehörige Daten gesammelt werden.


Hinweis: Wenn Sie sogar ein wenig Programmierkenntnisse haben, wird empfohlen, dass Sie Ihr Bestes geben, um diese selbst zu beheben. Es gibt viele Fehlerberichte, die seit Jahren inaktiv sind. Oder sammeln Sie zumindest genügend Debug-Daten, um das Problem zu beheben, bevor Sie es melden.

Einige nützliche Tools zum Debuggen

  1. apport-bug logs / core dump / backtrace

    Wenn vor dem Segmentierungsfehler keine Fehlermeldung angezeigt wird. Führen Sie es mit der --saveOption aus und suchen Sie nach dem Rückverfolgungsprotokoll:

    apport-bug program-cmd --save bug-report_output.txt
    
  2. gdb Quellcode zurückverfolgen / debuggen

    Wenn es nicht funktioniert hat, benutze gdb:

    $ gdb program-cmd
    (gdb) run
    (gdb) backtrace
    

    Wenn Sie eine Fehlermeldung erhalten, überprüfen Sie das Web, das Launchpad und den Upstream-Projekt-Bug-Tracker, falls es ähnliche Fälle gibt.

    Einige erfahrene Benutzer oder Benutzer, die dem Lernpfad von ac / c ++ folgen, können die entsprechenden -dbgSymbolpakete herunterladen . Anschließend können Sie den gdbProgrammfluss durch die Quelle verfolgen und die genaue Funktion / Anweisung abrufen, die den Laufzeitfehler auslöst.

  3. strace Ablaufverfolgung von Systemaufrufen

    Ein weiteres Tool, das helfen kann, ist strace, dass es mir gefällt. Es ist wirklich ein mächtiges Werkzeug.

    Es stellt sich vor:

    Im einfachsten Fall wird straceder angegebene Befehl ausgeführt, bis er beendet wird. Es fängt die von einem Prozess aufgerufenen Systemaufrufe und die von einem Prozess empfangenen Signale ab und zeichnet sie auf. Der Name jedes Systemaufrufs, seine Argumente und sein Rückgabewert werden als Standardfehler oder in die mit der Option -o angegebene Datei gedruckt.

    straceist ein nützliches Diagnose-, Anleitungs- und Debugging-Tool. Systemadministratoren, Diagnostiker und Problemlöser werden es für die Lösung von Problemen mit Programmen von unschätzbarem Wert finden, für die die Quelle nicht ohne weiteres verfügbar ist, da sie nicht neu kompiliert werden müssen, um sie zu verfolgen. Studenten, Hacker und allzu Neugierige werden feststellen, dass viel über ein System und seine Systemaufrufe gelernt werden kann, indem sogar gewöhnliche Programme verfolgt werden. Und Programmierer werden feststellen, dass, da Systemaufrufe und -signale Ereignisse sind, die an der Benutzer- / Kernel-Schnittstelle auftreten, eine genaue Untersuchung dieser Grenze sehr nützlich ist, um Fehler zu isolieren, die Richtigkeit zu überprüfen und Rennbedingungen zu erfassen.

    Quelle: man strace

  4. ltrace dynamische Bibliotheksaufrufverfolgung

    ltraceist ein Programm, das einfach den angegebenen Befehl ausführt, bis es beendet wird. Es fängt die von dem ausgeführten Prozess aufgerufenen dynamischen Bibliotheksaufrufe und die von diesem Prozess empfangenen Signale ab und zeichnet sie auf. Es kann auch die vom Programm ausgeführten Systemaufrufe abfangen und drucken.

    Seine Verwendung ist strace(1) sehr ähnlich .

    Quelle: man ltrace

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.