GNU/Linux >> Linux Esercitazione >  >> Linux

Come analizzo il file core dump di un programma con GDB quando ha parametri da riga di comando?

Puoi usare il core con GDB in molti modi, ma passare i parametri che devono essere passati all'eseguibile a GDB non è il modo per usare il file core. Questo potrebbe anche essere il motivo per cui hai ricevuto quell'errore. Puoi utilizzare il file core nei seguenti modi:

gdb <executable> <core-file> o gdb <executable> -c <core-file> o

gdb <executable>
...
(gdb) core <core-file>

Quando si utilizza il file core non è necessario passare argomenti. Lo scenario di arresto anomalo è mostrato in GDB (controllato con GDB versione 7.1 su Ubuntu).

Ad esempio:

$ ./crash -p param1 -o param2
Segmentation fault (core dumped)
$ gdb ./crash core
GNU gdb (GDB) 7.1-ubuntu
...
Core was generated by `./crash -p param1 -o param2'. <<<<< See this line shows crash scenario
Program terminated with signal 11, Segmentation fault.
#0  __strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:99
99    ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory.
    in ../sysdeps/i386/i686/multiarch/../../i586/strlen.S
(gdb)

Se vuoi passare i parametri all'eseguibile per il debug in GDB, usa --args .

Ad esempio:

$ gdb --args ./crash -p param1 -o param2
GNU gdb (GDB) 7.1-ubuntu
...
(gdb) r
Starting program: /home/@@@@/crash -p param1 -o param2

Program received signal SIGSEGV, Segmentation fault.
__strlen_ia32 () at ../sysdeps/i386/i686/multiarch/../../i586/strlen.S:99
99    ../sysdeps/i386/i686/multiarch/../../i586/strlen.S: No such file or directory.
    in ../sysdeps/i386/i686/multiarch/../../i586/strlen.S
(gdb)

Le pagine man saranno utili per vedere altre opzioni GDB.


Semplice utilizzo di GDB, per eseguire il debug dei file coredump:

gdb <executable_path> <coredump_file_path>

Un file coredump per un "processo" viene creato come file "core.pid".

Dopo essere entrato nel prompt di GDB (all'esecuzione del comando precedente), digita:

...
(gdb) where

Questo ti porterà con le informazioni, dello stack, dove puoi analizzare la causa del crash/guasto.Altro comando, per gli stessi scopi è:

...
(gdb) bt full

Questo è lo stesso di sopra. Per convenzione, elenca l'intera informazione sullo stack (che alla fine porta alla posizione del crash).


Basta saltare i parametri. GDB non ne ha bisogno:

gdb ./exe core.pid

Linux
  1. Come reindirizzare l'output di un programma su un file zip?

  2. Esecuzione di un programma con vari parametri (loop)?

  3. Come eseguire il debug del programma C utilizzando gdb in 6 semplici passaggi

  4. Come scrivere un file con C in Linux?

  5. Quando un file creato con mkstemp() viene eliminato?

Come utilizzare il comando Linux rm con esempi

Come correggere l'errore di conversione con Calibre

Come ricaricare .bash_profile nella riga di comando di Linux

Come affrontare i nomi dei file con gli spazi in Linux

Come mai non viene creato alcun core dump quando un'applicazione ha impostato SUID?

Come visualizzare il file Core (generale)