从sshell读取符号...(没有找到调试符号)......完成。 (是的,我在编译时使用了-g)

时间:2017-01-22 03:58:45

标签: c debugging gcc makefile gdb

出于某种原因,我得到了这个 错误消息,不允许我单步执行代码。

view.wantsLayer

不是逐行逐步,而是逐步完成代码的结束。

我的Makefile

ubuntu (master *) ECS150-Simple-Shell $ gdb sshell
GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.04) 7.11.1
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from sshell...(no debugging symbols found)...done.
(gdb) b LoadTerminal
Breakpoint 1 at 0x4010e8
(gdb) r
Starting program: /media/ubuntu/folder/sshell 
warning: the debug information found in "/lib64/ld-2.23.so" does not match "/lib64/ld-linux-x86-64.so.2" (CRC mismatch).


Breakpoint 1, 0x00000000004010e8 in LoadTerminal ()
(gdb) n
Single stepping until exit from function LoadTerminal,
which has no line number information.
sshell$ 

我的Makefile在每个目标文件上都带有-g

objects = main.o terminal.o history.o parser.o 
cc = gcc
cflags = -g -Werror
sshell: $(objects)
    $(cc) $(cflags) $(objects) -o sshell
    rm $(objects)
main.o: main.c
terminal.o: terminal.c
history.o: history.c
parser.o: parser.c
.PHONY: clean
clean:
    rm sshell

我甚至尝试将-g选项添加到我的目标文件中,但是我得到了同样的错误。

1 个答案:

答案 0 :(得分:0)

  

出于某种原因

有几个可能的原因。我猜测的最可能的原因是你的gcc不是真正的/usr/bin/gcc,而是一些shell包装器,它将不同的标志传递给/usr/bin/gcc

另一个可能的原因是你正在调试错误的二进制文件。 GDB说你正在调试/media/ubuntu/folder/sshell,但那是你构建的二进制文件吗?

  

我的Makefile

您的Makefile似乎没有任何问题(除了使用CCCLFAGS等非传统变量之外 - make区分大小写)。

而不是显示Makefile,你真的应该下雪make clean sshell生成的命令

以下是我将用于分类此问题的步骤:

  1. 验证编译和最终链接命令是否实际包含-g
  2. 确认gcc/usr/bin/gcc
  3. 确认/media/ubuntu/folder/sshell已在预期时间进行了修改(使用ls -l)。
  4. 确认其中包含调试信息:readelf -WS /media/ubuntu/folder/sshell | grep '\.debug'
  5. 上述陈述中至少有一个可能是错误的。如果它们都是真的,那么你的GCC或binutils安装就会破碎。