【发布时间】:2015-12-20 04:14:08
【问题描述】:
我正在为一些基本的多边形操作编写一个小型 C 库,并且我正在尝试从命令行使用 LLDB 进行调试。我可以使用已编译的测试运行程序运行 LLDB,但在逐步执行时我只能看到汇编指令而不是 C 代码。
我已经使用 -g 标志编译了我的库和测试运行程序,如下面的 Makefile 所示:
#Define compiler flags
CFLAGS = -g -Wall -Werror
#Define objects
OBJECTS = MASClip.o MASGraph.o MASClipTest.o
tests : $(OBJECTS)
cc $(CFLAGS) $(OBJECTS) -o tests
MASClip.o : MASClip.h MASClip.c
cc $(CFLAGS) -c MASClip.c
MASGraph.o : MASGraph.h MASGraph.c
cc $(CFLAGS) -c MASGraph.c
MASClipTest.o : MASClipTest.c
cc $(CFLAGS) -c MASClipTest.c
test :
make
make clean
./tests
.PHONY : clean
clean :
rm *.o
我可以通过函数名设置断点所以我不明白为什么代码不显示。
我四处搜索,但我没有发现我所做的与教程和其他问题所说的有所不同。我一定遗漏了一些明显的东西。
另外,我意识到我可以在 Xcode 中执行此操作,但是当我直接编写 C 语言时,我喜欢使用 VIM,如果能够从命令行使用 LLDB,那就太好了。
如何让 LLDB 在调试时显示实际的 C 代码?
【问题讨论】:
-
idk 也许您需要每个对象的 cflags?或者您实际上遇到了错误,并且某些对象没有重建?
-
cc是否在调用gcc?据我所知,-g只被gcc和g++识别。 -
我相信 cc 调用的 clang 编译器确实有一个 -g 标志用于调试信息。
-
我假设您执行了
make clean然后再次运行make以确保使用调试信息重建所有对象? -
我只是从源文件编译而没有先编译成对象,它可以工作。显然,不可能遍历预编译目标文件的代码。对吗?