单步执行直到退出没有行号信息的函数 main

Single stepping until exit from function main, which has no line number information

我在 Whosebug 上看到过类似的帖子

Why am I getting the message "Single-stepping until exit . . . which has no line number information" in GDB?

目前接受的答案并没有解决我的问题。

我做的是在main-function设置断点

(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." 表示 "the file or catalog does not exist"

可能是什么问题?

GDB

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

海湾合作委员会

gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0

生成文件

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

似乎正在发生的事情是您的文件正在使用隐式规则编译,然后目标文件使用您指定的规则 linked。由于您的 -g 选项在 link 命令上,而不是编译命令上,所以为时已晚。编译已经完成,没有调试信息。

相反,将 -g 选项添加到您的 CFLAGS 符号。这在隐式规则中使用,因此源文件将使用调试信息进行编译。 linking 不需要该选项(编译或 linking 不需要 -I.)。

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