2017-07-03 11 views
0

私はサイドにゲームエンジンを書いています。私は何かをデバッグする必要がある場合を除いて、大きな進歩を遂げてきました。私は、GDBを実行すると、私は通常、このようにスタックトレースを取得する:それは本当にハードに、デバッグを行うことが可能GDBが有用なバックトレースを返さない

Thread 2 received signal SIGABRT, Aborted. 
0x00007fffb73f9d42 in ??() 
(gdb) bt 
#0 0x00007fffb73f9d42 in ??() 
#1 0x00007fffb74e75bf in ??() 
#2 0x00007fff5fbfafd0 in ??() 
#3 0x000003075fbfb110 in ??() 
#4 0x00007fff5fbfafd0 in ??() 
#5 0x00007fffb5edbc2f in ??() 
#6 0x00007fff5fbfafe0 in ??() 
#7 0x00007fffb735f420 in ??() 
#8 0xffffffff5fbfb110 in ??() 
#9 0x0000000000000030 in ??() 
#10 0x00007fffffffffdf in ??() 
#11 0x00007fffc01c1a20 in ??() 
#12 0x00007fff5fbfb100 in ??() 
#13 0x00007fffb5eb584a in ??() 
#14 0x0000000000000000 in ??() 

を。私はmacOS Sierraで、これは私のMakefileです:

OUT_FILE := game 

OUT_DIR := out 
INC_DIR := src 
SRC_DIR := src 
OBJ_DIR := obj/native 

C := gcc 
CXX := g++ 
LINKER := g++ 
INC_DIRS := -I$(INC_DIR) 
C_FLAGS = \ 
    -Wall \ 
    -D NATIVE \ 
    -pedantic \ 
    -g 

CXX_FLAGS = \ 
    -std=c++11 \ 
    -std=c++14 \ 
    -Wall \ 
    -D NATIVE \ 
    -pedantic \ 
    -D DRAW_FPS \ 
    -D DRAW_COLLISION \ 
    -gdwarf \ 
    -g 
    #-Wextra \ 
    #-Wshadow \ 

EXEC_FLAGS = 
LIBS := -I /Library/Frameworks/SDL2.framework/Headers -I /Library/Frameworks/SDL2_image.framework/Headers -I /Library/Frameworks/SDL2_ttf.framework/Headers -framework SDL2 -framework SDL2_image -framework SDL2_ttf 

SRC_FILES := $(shell find $(SRC_DIR) -name '*.cpp' -o -name '*.c') 
OBJ_FILES := $(patsubst $(SRC_DIR)/%.cpp, $(OBJ_DIR)/%.o, $(SRC_FILES)) 
OBJ_FILES := $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.o, $(OBJ_FILES)) 
DEPFILES := $(patsubst $(SRC_DIR)/%.cpp, $(OBJ_DIR)/%.d, $(SRC_FILES)) 
DEPFILES := $(patsubst $(SRC_DIR)/%.c, $(OBJ_DIR)/%.d, $(DEPFILES)) 

$(OUT_FILE): $(OBJ_FILES) 
    $(LINKER) $(CXX_FLAGS) $(EXEC_FLAGS) $^ $(LIBS) -o [email protected] 

clean: 
    rm -rf $(OBJ_DIR) $(OUT_FILE) 

list: 
    @echo "$(SRC_FILES)" 
    @echo "$(OBJ_FILES)" 

depends: 
    rm -rf $(OBJ_DIR)/*.d 
    $(MAKE) $(DEPFILES) 

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c 
    @mkdir -p $(@D) 
    $(C) $(C_FLAGS) $(INC_DIRS) -c $< -o [email protected] 

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp 
    @mkdir -p $(@D) 
    $(CXX) $(CXX_FLAGS) $(INC_DIRS) -c $< -o [email protected] 

$(OBJ_DIR)/%.d: $(SRC_DIR)/%.cpp 
    @mkdir -p $(@D) 
    $(CXX) $(CXX_FLAGS) $(INC_DIRS) -MM $< | tr '\n\r\\' ' ' | sed -e 's%^%[email protected] %' -e 's% % $(OBJ_DIR)/%' > [email protected] 

-include $(DEPFILES) 

誰かが私に欠けていることを知っていますか?

+0

https://developer.apple.com/library/content/technotes/tn2124/_index.html#//apple_ref/doc/uid/DTS10003391-CH1-SECENABLE – stark

+0

0x0000000000000000 nullポインタdereferencigのように見えます。おそらく、スタックが壊れている可能性があります。スタックフレームの上に役に立つものはありますか?あなたは-gと-gdrwarfを同時に切り替えます。また、あなたはC++ 14とC++ 11を持っています。 –

+0

いいえ、単にgdbを初期化するだけで、いくつかの 'cout'があります。私は日々C++の開発者ではないので、公正なものを試してみるために、両方の人を追加しました。それがうまくいくかどうかは分かりませんでした。 –

答えて

0
  1. は、より多くのデバッグのためにどこに壊れたスタックを見つけるために
  2. 使用valgrindのを-ggdbを追加してください。明らかに、スタックのメモリを破壊してしまうのは明らかです。
関連する問題