linux g++不产生调试符号

vcirk6k6  于 2023-11-17  发布在  Linux
关注(0)|答案(4)|浏览(168)

我正在学习Linux,我的第一步是调整我的project在linux上运行。这里是简单的makefile(主要用于教育目的),它生成了文件:

#------------------------BUILD VARIABLES-----------------------------
#   Directories, containing headers
INCLUDE_DIR = ../Include/
#   Output directory which will contain output compiled file
OUTPUT_DIR = ../Bin/Debug/

SOURCES = EngineManager.cpp Geometry.cpp Main.cpp Model.cpp \
      Shaders.cpp TGAImage.cpp 

HEADERS = EngineManager.h Geometry.h Line.h Model.h Shaders.h \
      TGAImage.h Triangle.h

#------------------------BUILD_RULES---------------------------------
TinyRenderBuilding : $(addprefix $(INCLUDE_DIR), $(HEADERS)) $(SOURCES)
    mkdir -p  $(OUTPUT_DIR)
    g++ -std=c++14 -o $(OUTPUT_DIR)TinyRender.out -g -I$(INCLUDE_DIR) $(SOURCES)

字符串
我不明白,为什么g++不生成调试符号?出现-g选项

qmb5sa22

qmb5sa221#

要在使用g++编译时包含调试符号,需要传递-g选项。
在make make文件中,这通常意味着将其添加到CXXFLAGS
在创建可执行文件时,还要确保传递-g选项:编译时将.cpp文件转换为.o文件,链接时将这些.o文件转换为可执行文件。
如果在再次运行make之前更改了选项,请确保运行make clean cause,否则它将无法重新编译。
最后,确保您没有在可执行文件上运行strips命令等额外步骤(这将删除调试符号)。
您可以使用

objdump --syms <executable-file>

字符串
检查可执行文件是否有符号。
当它没有符号时,它会说:

SYMBOL TABLE:
no symbols


(我不是C / C++编程的Maven,我只是在调试别人的代码时遇到了这个问题)

gj3fmq9x

gj3fmq9x2#

根据你的makefile,g++应该会产生调试符号(显示-g选项)。要确认这一点,你可以在产生的二进制文件上运行file

$ file a.out
a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=9fe588c18099ef418daf288931bb033cc287922e, with debug_info, not stripped

字符串
(Note with debug_info输出中的字符串)

w9apscun

w9apscun3#

我不太确定,但是你可以试试-g或者-ggdb。你可以对它们做一些研究。我们用gdb工具来调试C程序时使用了这些参数。

dohp0rv5

dohp0rv54#

确保您没有为ldLDFLAGS设置-s选项

-s
       --strip-all
           Omit all symbol information from the output file.

字符串

相关问题