Come risolvere "Errore di segmentazione (core scaricato)"


15

Sto usando Ubuntu 14.04.

Dopo aver installato alcune applicazioni ho riscontrato un errore di segmentazione (core dumped).

Cosa significa ? Come posso risolvere questo problema?

Per esempio :

Dopo aver installato Chrome-stable, quando lo avvio dal terminale ho riscontrato questo errore.


Alcuni programmi binari si sono arrestati in modo anomalo, ma questo è molto specifico per il programma che si è arrestato in modo anomalo, quindi potrebbe essere necessario comunicarci quale programma lo ha prodotto, inoltre è possibile provare ad aggiornarlo.
Kwaadpepper,


1
Trattandosi di una fonte chiusa, è meglio inoltrare una segnalazione di bug a zio GooGle!
user.dz,

1
Bene SH :) Chiederò allo zio; P
Ravan,

1
Prova rimuovere IT di preferenze e cache, sudo rm -rf ~/.config/google-chrome ~/.cache/google-chrome. Quindi google-chrome --incognito
eseguilo in

Risposte:


12

Cosa significa?

Vedi AU: Cos'è un errore di segmentazione? e anche questo che ha alcuni esempi su come riprodurlo, SO: Cos'è l'errore di segmentazione? . la descrizione più semplice che posso trovare (potrebbe non essere la perfetta):

Il programma ha tentato di accedere a un'area di memoria esterna alla propria sezione. Il sistema operativo lo blocca.

Alcuni casi: lettura del valore con puntatore inizializzato, uscita dal range in un array, chiamata di funzione (quando la compatibilità con le versioni precedenti non viene mantenuta), ...

Tuttavia non è sempre facile trovare la causa con programmi di grandi dimensioni o con quelli che trasmettono su altre librerie di progetti. E la maggior parte dei casi finisce con una segnalazione di bug, sia per il programma di destinazione sia per le sue dipendenze (progetto a monte o pacchetto di distribuzione a valle).

Come posso risolvere questo problema?

Se non hai effettuato alcuna configurazione / installazione personalizzata e hai installato tutti gli aggiornamenti. Attiva una segnalazione di bug , vedi Come posso segnalare una segnalazione?

Se open source supportato da Ubuntu usa ubuntu-bug( apport-bug). Per la fonte chiusa di terze parti, controlla le loro pagine di aiuto su come segnalare i bug e raccogliere i dati relativi.


Nota: se hai anche un po 'di background di programmazione, si consiglia di fare del proprio meglio per risolverlo da soli. Ci sono molte segnalazioni di bug là fuori inattive per anni. O almeno raccogliere sufficienti dati di debug per risolvere il problema prima di segnalarlo.

Alcuni strumenti utili per il debug

  1. apport-bug log / core dump / backtrace

    Se non si dispone di un messaggio di errore prima dell'errore di segmentazione. Eseguilo con l' --saveopzione e cerca il log di back trace:

    apport-bug program-cmd --save bug-report_output.txt
    
  2. gdb codice sorgente backtrace / debug

    Se non ha funzionato, utilizzare gdb:

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

    Se ricevi un messaggio di errore, controlla il web, il launchpad e il tracker dei bug del progetto a monte se ci sono casi simili.

    Per alcuni utenti esperti o che stanno seguendo il percorso di apprendimento ac / c ++, possono scaricare i -dbgpacchetti di simboli corrispondenti . Quindi è possibile utilizzare gdbper tracciare il flusso del programma attraverso l'origine e ottenere la funzione / istruzione esatta che genera l'errore di runtime.

  3. strace traccia delle chiamate di sistema

    Un altro strumento che può aiutare è strace, mi piace. È davvero uno strumento potente.

    Si presenta:

    Nel caso più semplice straceesegue il comando specificato fino alla sua uscita. Intercetta e registra le chiamate di sistema che vengono chiamate da un processo e i segnali che vengono ricevuti da un processo. Il nome di ogni chiamata di sistema, i suoi argomenti e il suo valore restituito vengono stampati su errore standard o sul file specificato con l'opzione -o.

    straceè un utile strumento diagnostico, didattico e di debug. Gli amministratori di sistema, i diagnostici e i tiratori di problemi lo troveranno prezioso per risolvere problemi con programmi per i quali la fonte non è prontamente disponibile poiché non è necessario ricompilarli per rintracciarli. Studenti, hacker e persone troppo curiose scopriranno che molto può essere appreso su un sistema e le sue chiamate di sistema tracciando anche i normali programmi. E i programmatori scopriranno che, poiché le chiamate e i segnali di sistema sono eventi che si verificano nell'interfaccia utente / kernel, un attento esame di questo limite è molto utile per l'isolamento dei bug, il controllo della sanità mentale e il tentativo di acquisire condizioni di gara.

    Fonte: man strace

  4. ltrace traccia delle chiamate della libreria dinamica

    ltraceè un programma che esegue semplicemente il comando specificato fino alla sua uscita. Intercetta e registra le chiamate della libreria dinamica che vengono chiamate dal processo eseguito e i segnali che vengono ricevuti da quel processo. Può anche intercettare e stampare le chiamate di sistema eseguite dal programma.

    Il suo utilizzo è molto simile a strace(1).

    Fonte: man ltrace

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.