2017-11-05 22 views
-1

私はLinuxを学んでいます。私の最初のステップは、projectをLinux上で動作させることです。ここでは、ファイルを生成する単純なメイクファイル(主に教育目的で)、次のとおりです。g ++でデバッグシンボルが生成されない

#------------------------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オプションが表示されます

+0

が-ggdbフラグを使用してみてくださいだけではなく-gの(出力でwith debug_info文字列に注意してください)。 –

+0

[DWARF](https://en.wikipedia.org/wiki/DWARF)形式のデバッグ情報が生成されないことを確認しますか?あなたの[GCC](http://gcc.gnu.org/)バージョンは何ですか? 'g ++ -v'を使ってみてください。 **あなたの質問を編集して**改善してください。 –

+0

ビルドする前にすべてのオブジェクトファイルを削除しましたか( 'make clean'を試してください)? –

答えて

2

メイクファイルによれば、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 

2

私は完全にはわかりませんが、-gまたは-ggdbを試すことができます。これらについていくつかの調査を行うことができます。これらのパラメータを使用して、gdbツールを使用してCプログラムをデバッグしていました。

関連する問題