В этих ??
обычно указывается название функции. GDB не знает названия этих функций и поэтому отображает ??
.
Теперь, почему это происходит? Зависит. G CC компилируется, включая символы (например, имена функций и тому подобное) по умолчанию. Скорее всего, вы работаете с версией strip * , где символы были удалены, или просто с неправильным файлом.
Как подсказывает @ zwol , строку, которую вы видите warning: exec file is newer than core file
указывает на то, что происходит что-то еще, что вы не указали в своем вопросе. Вы работаете с core
файлом дампа, созданным сбойным исполняемым файлом, который устарел.
Я бы посоветовал перекомпилировать программу с нуля и убедиться, что вы открываете нужный файл с помощью GDB. , Сначала создайте новый дамп core
, разбив новую программу, затем откройте его в GDB.
Предполагая следующее program.c
:
int main(void) { return 1/0; }
Это должно работать:
$ rm -f core
$ gcc program.c -o program
$ ./program
Floating point exception (core dumped)
$ gdb program core
Reading symbols from program...(no debugging symbols found)...done.
[New LWP 11896]
Core was generated by `./program'.
Program terminated with signal SIGFPE, Arithmetic exception.
#0 0x000055d24a4cd790 in main ()
(gdb) bt
#0 0x000055d24a4cd790 in main ()
(gdb)
ПРИМЕЧАНИЕ: если вы не видите (core dumped)
при запуске процесса, это означает, что дамп ядра не был сгенерирован (что оставляет вас прежним). Если вы используете Bash, попробуйте выполнить команду ulimit -c unlimited
до сбоя программы.