GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu analyzovat soubor výpisu jádra programu pomocí GDB, když má parametry příkazového řádku?

Jádro s GDB můžete použít mnoha způsoby, ale předávání parametrů, které mají být předány spustitelnému souboru do GDB, není způsob, jak používat soubor jádra. To může být také důvod, proč jste dostali tuto chybu. Základní soubor můžete použít následujícími způsoby:

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

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

Při použití základního souboru nemusíte předávat argumenty. Scénář selhání je zobrazen v GDB (kontrolováno pomocí GDB verze 7.1 na Ubuntu).

Například:

$ ./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)

Pokud chcete předat parametry spustitelnému souboru k ladění v GDB, použijte --args .

Například:

$ 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)

Manuálové stránky vám pomohou zobrazit další možnosti GDB.


Jednoduché použití GDB k ladění souborů Coredump:

gdb <executable_path> <coredump_file_path>

Soubor coredump pro „proces“ se vytvoří jako soubor „core.pid“.

Jakmile se dostanete do příkazového řádku GDB (při spuštění výše uvedeného příkazu), zadejte:

...
(gdb) where

Tím získáte informace o zásobníku, kde můžete analyzovat příčinu selhání/chyby.Další příkaz, pro stejné účely je:

...
(gdb) bt full

To je stejné jako výše. Podle konvence uvádí informace o celém zásobníku (což nakonec vede k místu selhání).


Stačí přeskočit parametry. GDB je nepotřebuje:

gdb ./exe core.pid

Linux
  1. Jak přesměrovat výstup programu do souboru ZIP?

  2. Jak analyzovat segment zvukového souboru pomocí Sox?

  3. Jak napsat soubor s C v Linuxu?

  1. Jak nastavit parametry, když Pipe Bash Script to Bash?

  2. Provádění programu s různými parametry (smyčka)?

  3. Jak odstranit soubory .fuse_hidden*?

  1. Je možné zjistit, kdy byl soubor stažen?

  2. Jak ladit program C pomocí gdb v 6 jednoduchých krocích

  3. Když je smazán soubor vytvořený pomocí mkstemp()?