DebuggingProgramCrash_it

Debugging Central

This page is part of the debugging series — pages with debugging details for a variety of Ubuntu packages.

Questo documento spiega come installare i pacchetti di debug in Ubuntu che forniranno utili informazioni inerenti l'anomalia.

Pacchetti contenenti i simboli di debug

Innanzitutto verificare se esiste, nei repository main, un pacchetto equivalente ma con sufffisso -dbg. Questi sono i pacchetti contenenti i siboli di debug ed equivalgono a '-dbgsym' descritto più avanti. È possibile usare in tutta sicurezza il pacchetto di debuging, ma non entrambi contemporaneamente. Provare ad installare il pacchetto aggiungendo -dbg al suo nome, per esempio:

sudo apt-get install xserver-xorg-core-dbg

se il pachetto in questione è xserver-xorg-core.

Altrimenti se il pacchetto -dbg non esiste:

  1. Creare un /etc/apt/sources.list.d/ddebs.list eseguendo la seguente linea in un terminale:

    echo "deb http://ddebs.ubuntu.com $(lsb_release -cs) main restricted universe multiverse" | \
    sudo tee -a /etc/apt/sources.list.d/ddebs.list
  2. I rilasci stabili (non alpha e beta) richiedono l'aggiunta di altre tre linee al medesimo file, quindi eseguire il seguente comando nel terminale:
    echo "deb http://ddebs.ubuntu.com $(lsb_release -cs)-updates main restricted universe multiverse
    deb http://ddebs.ubuntu.com $(lsb_release -cs)-security main restricted universe multiverse
    deb http://ddebs.ubuntu.com $(lsb_release -cs)-proposed main restricted universe multiverse" | \
    sudo tee -a /etc/apt/sources.list.d/ddebs.list
    È possibile anche aggiungere queste linee usando Ubuntu Software Center:
    • Avviare Software Center e nella barra superiore scegliere Modifica -> Sorgenti Software.

    • Choose Software Sources or Repositories via the Settings menu, and click on the Third-Party Software tab.

    • Scegliere Altro software -> Aggiungi ed inserire le tre linee una alla volta.

  3. Importare l'archivio dei simboli di debug tramita chiave:
    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 428D7C01
  4. Quindi eseguire
    sudo apt-get update
    per aggiornare la vostra lista di pacchetti.
  5. I pacchetti con i simboli di debug hanno il suffisso '-dbgsym' quindi per installare il pacchetto 'yelp' si dovrà eseguire:
    apt-cache policy yelp
    Ciò mostrerà la versione attualmente installata (si userà 2.22.1-0ubuntu2.8.04.1 in questo esempio).

    NOTA: 'yelp' [che è il nome del pacchetto per "Aiuto e Supporto"] è solo un esempio e non e non una parte del comando: 'yelp' è usato solamente per mostrare la procedura. Si dovra cambiare 'yelp' con il nome del pacchetto di cui si vuole il debug.

  6. Installazione dei simboli di debug:
    sudo apt-get install yelp-dbgsym=2.22.1-0ubuntu2.8.04.1

È anche possibile usare Ubuntu Software Center e cercare 'yelp-dbgsym' ed installarlo da lì.

La procedura sopra descritta installerà la simbologia di debug per il solo pacchetto 'yelp'. Potrebbe però accadere che il pacchetto yelp utilizzi delle librerie condivise in altri pacchetti, sarà quindi necessario dover installare anche la simbologia di debug anche per quei pacchetti per avere uno stacktrace utilizzzabile. Per ovviare scaricare lo script list-dbgsym-packages-v2.sh ed eseguirlo (dopo un chmod a+x list-symbols-packages-v2.sh) in questo modo:

Warning /!\ aggiornare list-dbgsym-packages-v2.sh a list-symbols-packages-v2.sh. Questo è il primo passo per renderlo compatibile con il nuovo GDB (che per impostazine predefinita non carica più tutte le librerie all'avvio). -v2 attualmente funziona solo in rapporto ad un binario attualmente in esecuzione (es., con '-p $(pidof <qualunque>')

  • bash list-symbols-packages-v2.sh yelp

per ottenere una lista completa di pacchetti da installare. Lo script può anche essere aggregato ad un processo in esecuzione ed in questo caso, raccomandabile, si avrà una lista ancora più completa di pacchetti da installare, semprechè il vostro problema non vi impedisca l'esecuzione del programma. È possibile ottenere l'ID di un processo tramite <code>pidof</code>, cos' mentre si avrà yelp in esecuzione si potrà eseguire:

  • bash list-symbols-packages-v2.sh -p $(pidof -s yelp)

per ottenere una lista di pacchetti utile a fornire le migliori informazioni di debug. Se il proceso in esecuzione è un server (demone), sarà necessario eseguire 'list-symbols-packages.sh' con sudo.

  1. Ora è possibile ottenere una Backtrace.

  2. Oppure anche eseguire Valgrind, se il programma crasha con un errore di segmentazione "Segmentation fault" o un errore di bus "Bus error".

  3. Opzionalmente, vi potrà essere richiesto di produrre una Strace.

  4. È sempre utile fornire il file : ~/.xsession-errors

Come rimuovere tutto ciò e tornare ad un sistema normale dopo aver fornito la traccia?

È possibile rimuovere tutti i simboly di debug ed i repository ddebs con il seguenti comandi:

  • sudo apt-get remove \.*-dbgsym
    sudo rm /etc/apt/sources.list.d/ddebs.list
    sudo apt-get update

Riferimenti

Il server Xorg

Il server X, in maniera predefinita, intrappola i soui crash e dump in una stack trace in /var/log/Xorg.0.log. Tuttavia, questo stack viene modificato dal gestore di segnale stesso. Per ottenere un crash "normale" che attiverà un core dump (e segnalazione da parte di "Apport"), aggiungere al file /etc/X11/xorg.conf:

Section "ServerFlags"
        Option "NoTrapSignals" "true"
EndSection

Vi preghiamo di fare riferimento a debug Xorg server crashes.

Info for the BugSquad

If you're trying to apport-retrace a crash report from a bug that didn't happen on the same Ubuntu release as the one you're running, do the following:

Say that you're running Gutsy and the crash happened on Feisty:

  1. This will create a minimal feisty system.

    sudo mkdir -p /chroots/feisty
    sudo debootstrap feisty /chroots/feisty/
  2. Now you change into this minimal feisty system.

    sudo chroot /chroots/feisty
  3. edit /etc/apt/sources/list and all the repositories you need, especially Martin's ddeb repository.

  4. apt-get update; apt-get install gdb apport
  5. use apport-retrace as you're used to.

For more information on dealing with bug reports Apport see Bugs/ApportRetraces.


CategoryBugSquad CategoryDebugging

DebuggingProgramCrash_it (last edited 2013-01-22 19:21:35 by fabiomarconi)