使用 GCC 调试标志(编译阶段/链接阶段)

Nov*_*ser 7 c++ gcc g++ debug-symbols compiler-options

我有一个这个Makefile

application=<somebinaryname>
CXXFLAGS=-g -std=c++14 -Wall -Werror -pedantic
LDFLAGS=-g

auto: $(application)

$(application): main.o aaa.o aab.o aba.o baa.o
        $(CXX) $(LDFLAGS) -o $@ $^

%.o: %.cpp
        $(CXX) $(CXXFLAGS) -c $< -o $@

# rest of Makefile not relevant to my question
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我-g选项是否应该在编译阶段(使用 CXXFLAGS)或链接阶段(使用 LDFLAGS)进行吗?我到处寻找示例和文档,但它们都有非常琐碎的示例,例如(甚至是联机帮助页):

gcc -g -o binary source.cpp
Run Code Online (Sandbox Code Playgroud)

我明白了,但这并没有告诉我太多。

对此还有更清楚的了解吗?

gan*_*bra 2

-g 产生调试信息。使用 -g 选项编译 C 程序。这允许编译器收集调试信息。然后你可以使用 gdb 来调试二进制文件。

一些有用的链接

http://www.thegeekstuff.com/2010/03/debug-c-program-using-gdb/

https://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html

GCC -g 与 -g3 GDB 标志:有什么区别?

  • 我道歉。我的问题可能不够清楚。您的链接重复了大约 5000 个不同文档中已经存在的信息。我知道 -g 会生成未优化的调试二进制文件,并且所有符号名称都完好无损。我知道什么是调试,什么是调试文件,为什么使用它,如何使用它并且已经使用它很多年了。然而,我不确定的是“-g”或“-ggdb”是否应该在编译阶段(与“-c”一起)或在链接阶段进行?那么,在我的特定 Makefile 示例中,它应该与 CXXFLAGS 或 LDFLAGS 一起使用,还是像我一样与两者一起使用? (9认同)