gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:51:27 25 4
gpt4 key购买 nike

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

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$

它不是逐行单步执行,而是单步执行代码末尾。

我的生成文件

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

我的 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
gcc -g -Werror -c main.c -o main.o
terminal.o: terminal.c
gcc -g -Werror -c terminal.c -o terminal.o
history.o: history.c
gcc -g -Werror -c history.c -o history.o
parser.o: parser.c
gcc -g -Werror -c parser.c -o parser.o
.PHONY: clean
clean:
rm sshell

我什至尝试将 -g 选项添加到我的目标文件中,但出现了相同的错误。

最佳答案

For some reason

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

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

My 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'

以上陈述至少有一项可能是错误的。如果它们都为真,则您的 GCC 或 binutils 安装已损坏。

关于c - 从 sshell 读取符号...(未找到调试符号)...完成。 (是的,我编译时用了-g),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41787183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com