G++ 不生成调试符号
g++ does not produce debug symbols
我正在学习Linux,我的第一步是调整我的项目以在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
选项
要在编译时包含调试符号g++
您需要传递-g
选项。
在制作文件中,这通常意味着将其添加到CXXFLAGS
。
还要确保在创建可执行文件时传递-g
选项:编译时将.cpp
文件转换为.o
文件,执行链接时,将这些.o
文件转换为可执行文件)。
如果在再次运行make
之前更改选项,请确保运行make clean
原因,否则不会重新编译它。
最后,确保您没有其他步骤,例如在可执行文件上运行strips
命令(这将删除调试符号)。
您可以使用
objdump --syms <executable-file>
以检查可执行文件是否具有符号。
当它没有符号时,它会说如下:
SYMBOL TABLE:
no symbols
(我不是C/C++编程专家,我只是在尝试调试其他人代码时遇到这个问题)
根据您的生成文件,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
(注意输出中的字符串with debug_info
)
我不完全确定,但你可以尝试-g或-ggdb。你可以对这些做一些研究。我们使用这些参数通过 gdb 工具调试 C 程序。
相关文章:
- VC++本机单元测试,找不到调试符号
- 调试符号中缺少 QObject 类信息(编辑但存在其他 Qt 类)
- 有没有一种预处理器的方法可以从调试符号中删除代码段
- 简单的cmake项目,在Windows上使用nmake构建没有调试符号
- 重新定位源文件时读取调试符号
- 如何将libc++与调试符号链接起来?
- 在 gdb (Windows) 中添加 dll 的调试符号
- 从静态库中去除/删除调试符号和存档名称
- Nodejs本机模块 - 如何删除调试符号
- 如何告诉 clang 将调试符号放入可执行二进制文件中
- G++ 不生成调试符号
- 如何为安卓原生应用生成调试符号
- Makefile和QT5:链接QT5与调试符号
- 找不到调试符号
- 我如何检查静态库,以查看是否正在导出调试符号
- 公开使用多种语言编译的程序的调试符号
- 用调试符号编译需要其他库
- 程序在没有调试符号的情况下崩溃,运行良好(两种情况下都没有优化或任何内容)
- 如何在不调试符号的情况下确定从外部库引发的异常
- 找不到GDB调试符号