GCC:已加载符号,但函数名为“?”&引用;
我正在编译一个玩具操作系统,对C文件使用GCC:已加载符号,但函数名为“?”&引用;,c,debugging,gcc,gdb,qemu,C,Debugging,Gcc,Gdb,Qemu,我正在编译一个玩具操作系统,对C文件使用gcc-g,对asm文件使用nasm-g,并使用ld来整合所有内容 我用qemu-s运行它,用-x启动gdb,如下所示: file build/kernel.elf target remote localhost:1234 检查文件中的符号将显示函数及其名称: $ nm -g build/kernel.elf 00101000 D framebuffer 0010001d T kstart 00100010 T loader 00103000 B NUL
gcc-g
,对asm文件使用nasm-g
,并使用ld
来整合所有内容
我用qemu-s
运行它,用-x
启动gdb
,如下所示:
file build/kernel.elf
target remote localhost:1234
检查文件中的符号将显示函数及其名称:
$ nm -g build/kernel.elf
00101000 D framebuffer
0010001d T kstart
00100010 T loader
00103000 B NULL
如果我设置了一个命名断点(例如,breakkstart
),gdb也会跟着设置,但当它实际中断时:
0x000fd29f in ?? ()
Breakpoint 1 at 0x10001d: file src/kernel.c, line 19.
(gdb) bt
#0 0x000fd29f in ?? ()
#1 0x90669066 in ?? ()
#2 0x00000000 in ?? ()
函数名不再存在了?我做错了什么?如果您不提供某些调试信息,调试器在单步执行程序集时可能会出现问题。可能是这样吗?我如何提供必要的信息?我已经在使用
-g
开关了,这些符号会在检查时显示出来,而且我可以在它们上打断它们,我实际上不记得了,但是有些东西。您可能需要考虑更改用户名,以便人们可以很容易地使用@用户名语法来引用您的名字。参数以获取.0文件的最大GDB信息是-GBD3,然后该文件将包含行号、符号名、函数名等。建议您仔细阅读gcc和gdb实用程序可能已损坏的堆栈?或者您是否有0xfd29f的函数?