Puede usar el núcleo con GDB de muchas maneras, pero pasar parámetros que se pasarán al ejecutable a GDB no es la forma de usar el archivo del núcleo. Esta también podría ser la razón por la que recibió ese error. Puede usar el archivo central de las siguientes maneras:
gdb <executable> <core-file>
o gdb <executable> -c <core-file>
o
gdb <executable>
...
(gdb) core <core-file>
Cuando usa el archivo central, no tiene que pasar argumentos. El escenario de bloqueo se muestra en GDB (comprobado con GDB versión 7.1 en Ubuntu).
Por ejemplo:
$ ./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)
Si quiere pasar parámetros al ejecutable para ser depurado en GDB, use --args
.
Por ejemplo:
$ 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)
Las páginas man serán útiles para ver otras opciones de GDB.
Uso simple de GDB, para depurar archivos de volcado de memoria:
gdb <executable_path> <coredump_file_path>
Un archivo de volcado de núcleo para un "proceso" se crea como un archivo "core.pid".
Después de ingresar al indicador de GDB (al ejecutar el comando anterior), escriba:
...
(gdb) where
Esto lo llevará con la información de la pila, donde puede analizar la causa del bloqueo/fallo. Otro comando, para los mismos fines es:
...
(gdb) bt full
Esto es lo mismo que arriba. Por convención, enumera toda la información de la pila (que en última instancia conduce a la ubicación del bloqueo).
Simplemente omita los parámetros. GDB no los necesita:
gdb ./exe core.pid