C 单步执行,直到退出主功能,该功能没有行号信息

C 单步执行,直到退出主功能,该功能没有行号信息,c,debugging,gdb,C,Debugging,Gdb,我在stackoverflow上看到过类似的线程 到目前为止,公认的答案并不能解决我的问题 我要做的是在主函数上设置一个断点 (gdb) break main Breakpoint 1 at 0x6fe (gdb) run Starting program: /home/bjorn/printprog Breakpoint 1, 0x00005555555546fe in main () (gdb) 到目前为止,上帝,但当我开始迈步时,我得到以下信息: (gdb) s Single s

我在stackoverflow上看到过类似的线程

到目前为止,公认的答案并不能解决我的问题

我要做的是在主函数上设置一个断点

(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.
海湾合作委员会

  • 或者可能是我的makefile出错或丢失了什么
生成文件

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

可能发生的情况是,正在使用隐式规则编译文件,然后使用指定的规则链接对象文件。由于您的
-g
选项位于link命令上,而不是compile命令上,因此为时已晚。编译已在没有调试信息的情况下完成

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


-g
编译选项添加到
CFLAGS
。这对你的链接命令行没有多大帮助。@Fredrarson-谢谢你解决了这个问题:)很好!我根据我的评论作了回答。
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.
  CC=gcc
  CFLAGS= -g
  printprog: main.o print.o 
      $(CC) -o printprog main.o print.o