Один шаг до выхода из функции main, которая не имеет информации о номере строки - PullRequest
0 голосов
/ 10 апреля 2020

Я видел подобный поток здесь в stackoverflow

Почему я получаю сообщение "Один шаг до выхода ... у которого нет информации о номере строки" в GDB?

На данный момент принятый ответ не решает мою проблему.

Что я делаю, так это устанавливаю точку останова на главной функции

(gdb) break main
Breakpoint 1 at 0x6fe
(gdb) run
Starting program: /home/bjorn/printprog 

Breakpoint 1, 0x00005555555546fe in main ()
(gdb) 

пока что бог но когда я начинаю наступать, я получаю следующее:

(gdb) s
Single stepping until exit from function main,
which has no line number information.
hell world!!!!
Number of characters in the string are 14
__libc_start_main (main=0x5555555546fa <main>, argc=1, argv=0x7fffffffdef8, init=<optimized 
out>, fini=<optimized out>, 
rtld_fini=<optimized out>, stack_end=0x7fffffffdee8) at ../csu/libc-start.c:344
344 ../csu/libc-start.c: Filen eller katalogen finns inte.

"Filen eller katalogen finns inte." означает "файл или каталог не существует"

В чем может быть проблема?

  • Кажется, что-то не хватает, причина в том, что начало - c , мне нужен этот файл?

  • что версии отличаются между g cc и gdb?

GDB

 GNU gdb (Ubuntu 8.1-0ubuntu3.2) 8.1.0.20180409-git

G CC

gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
  • или, может быть, мой make-файл неправильный или чего-то не хватает?

makefile

  CC=gcc
  CFLAGS=-I.
  printprog: main.o print.o 
      $(CC) -g -o printprog main.o print.o -I.

1 Ответ

1 голос
/ 10 апреля 2020

Похоже, что ваши файлы компилируются с использованием неявного правила, а затем объектные файлы связываются с использованием указанного вами правила. Поскольку ваша опция -g указана в команде link, а не в команде compile, уже слишком поздно. Компиляция уже выполнена без отладочной информации.

Вместо этого добавьте параметр -g к символу CFLAGS. Это используется в неявном правиле, поэтому исходные файлы будут скомпилированы с отладочной информацией. Эта опция не нужна для компоновки (и -I. не должна быть необходима ни для компиляции, ни для компоновки).

  CC=gcc
  CFLAGS= -g
  printprog: main.o print.o 
      $(CC) -o printprog main.o print.o
...