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