【发布时间】:2020-03-26 21:14:26
【问题描述】:
我在 macOS Catalina 版本 10.15.2 上下载了 gdb 9.1。我正在尝试从用 C 编写的名为 test 的代码调试可执行文件,该代码在我的 Makefile 中创建并链接到静态库。我尝试将 -g 和 -ggdb 放在所有编译行和链接行。我确保每次进行更改时都使用make clean,然后运行make test 重新运行Makefile。我的 Makefile 内容如下:
all: main
mkdir -p build/bin
mkdir -p build/lib
mkdir -p build/objects
mv *.o build/objects
mv *.a build/lib
mv main build/bin
main: main.o liblinkedlist.a
gcc main.o -g -o main -llinkedlist -L.
test: test.o liblinkedlist.a
gcc test.o -g -o test -llinkedlist -L.
mkdir -p build/bin
mkdir -p build/lib
mkdir -p build/objects
mv *.o build/objects
mv *.a build/lib
test.o: src/bin/test.c
gcc src/bin/test.c -g -c -I include
main.o: src/bin/main.c
gcc -g src/bin/main.c -c -I include
liblinkedlist.a: src/lib.c
gcc src/lib.c -g -c -I include
ar rs liblinkedlist.a lib.o
clean:
rm -rf build
rm -f test
rm -f main
当我尝试执行 gdb ./test 时,它会在终端中为我提供以下代码行:
从 ./test... 读取符号
警告:无法打开 OSO 存档文件“/Users/eamonohare/Desktop/Spring_2020_Classes/CSE_109/homework-3/./liblinkedlist.a”
警告:`/Users/eamonohare/Desktop/Spring_2020_Classes/CSE_109/homework-3/test.o':无法打开以读取符号:没有这样的文件或目录。 (在 ./test 中找不到调试符号)
(gdb)
我已尝试解决所有其他遇到此问题的用户,但没有一个有效。我不确定如何解决这个问题。
【问题讨论】:
-
mv *.a build/lib可能是因为您在链接后将所有对象和库移到了不同的路径。 -
解决了无调试信号错误,但现在我在尝试运行代码时遇到错误。 (gdb) 运行启动程序:/Users/eamonohare/Desktop/Spring_2020_Classes/CSE_109/homework-3/test [进程 72391 的新线程 0x1a03] [进程 72391 的新线程 0x2703] 然后它就坐在这一行,什么也不做。
-
不使用gdb直接运行程序有什么作用吗?
-
是的,程序尝试运行,但出现 29 段错误
-
抱歉,如果没有minimal verifiable example,将无法为您提供更多帮助。可能是您有导致未定义行为的错误。由于它是 UB,它在使用 gdb 运行时可能会做一件事,而在直接运行时可能会做其他事情。在 gdb 中,您可以尝试 ctrl-c 来查看它是否会破坏您的程序,如果是,您可以获取堆栈跟踪并进一步调试。