Come risolvere "Errore di segmentazione (core dumped)"

8

Sto usando Ubuntu 14.04.

Dopo l'installazione di alcune applicazioni ho riscontrato un errore di segmentazione (core dumped).

Che cosa significa? Come posso risolvere questo problema?

Ad esempio :

Dopo aver installato chrome-stable, quando lo avvio dal terminale provo questo errore.

    
posta Ravan 27.10.2015 - 12:44

1 risposta

7

Che cosa significa?

Vedi AU: che cos'è un errore di segmentazione? e anche questo che ha alcuni esempi su come riprodurlo, SO: Qual è l'errore di segmentazione? . la descrizione più semplice con cui posso venire (potrebbe non essere il perfetto):

  

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

Alcuni casi: valore di lettura con puntatore inizializzato, uscita dall'intervallo di un array, chiamata di funzione (se non viene mantenuta la compatibilità con le versioni precedenti), ...

Tuttavia non è sempre facile trovare la causa con programmi di grandi dimensioni o quelli che si ripetono su lib di altri progetti. E la maggior parte dei casi finisce con una segnalazione di bug, sia per il programma di destinazione che per una delle sue dipendenze (progetto upstream o pacchetto di distribuzione downstream).

Come posso risolvere questo problema?

Se non hai effettuato alcuna configurazione / configurazione personalizzata e tutti gli aggiornamenti sono stati installati. Segnala un bug , vedi Come faccio a segnalare un bug?

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

Nota: se hai anche un piccolo background di programmazione, ti consigliamo di fare del tuo meglio per risolverlo da solo. Ci sono molte segnalazioni di bug là fuori inattive da anni. O almeno raccogli abbastanza dati di debug per risolvere il problema prima di segnalarlo.

Alcuni strumenti utili per il debug

  1. apport-bug logs / core dump / backtrace

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

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

    Se non funziona, usa gdb :

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

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

    Per alcuni utenti esperti o che seguono un percorso di apprendimento c / c ++, possono scaricare i pacchetti di simboli -dbg corrispondenti. Quindi puoi usare gdb per tracciare il flusso del programma attraverso l'origine e ottenere l'esatta funzione / istruzione che aumenta 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 da sé:

      

    Nel caso più semplice strace esegue il comando specificato fino alla sua uscita. Intercetta e registra le chiamate di sistema che sono chiamate da a              processo e i segnali che vengono ricevuti da un processo. Il nome di ogni chiamata di sistema, i suoi argomenti e il suo valore di ritorno sono stampati su              errore standard o al 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 guai lo troveranno              inestimabile per risolvere problemi con programmi per i quali la fonte non è prontamente disponibile poiché non è necessario ricompilarli              per rintracciarli. Studenti, hacker e troppo curiosi scopriranno che si può imparare molto su un sistema e il suo sistema              chiama tracciando anche programmi ordinari. E i programmatori troveranno che dal momento che le chiamate di sistema e i segnali sono eventi che accadono al              Interfaccia utente / kernel, un esame approfondito di questo limite è molto utile per l'isolamento dei bug, il controllo di integrità e il tentativo di acquisizione              condizioni di gara.

    Fonte: man strace

  4. ltrace traccia delle chiamate di librerie dinamiche

      

    ltrace è un programma che esegue semplicemente il comando specificato fino a   esso          uscite. Intercetta e registra le chiamate di libreria dinamiche che sono          chiamato dal processo eseguito e dai segnali ricevuti da          quel processo. Può anche intercettare e stampare le chiamate di sistema          tagliato dal programma.

         

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

    Fonte: man ltrace

risposta data user.dz 30.11.2015 - 01:09

Leggi altre domande sui tag