0

gdb を使用して emacs で実行してデバッグしようとしていますが、成功しません。よく知られている「デバッグシンボルが見つかりません」というメッセージが引き続き表示されます。問題は -g フラグを使用してコンパイルする方法にあると思いますが、どこが間違っているのかわかりません。メイクファイルは次のとおりです。

all: tree

tree: main.o OctTree.o my_vec.o runge_kutta.o initialize.o global.o
    g++ -g -o tree main.o OctTree.o my_vec.o runge_kutta.o initialize.o global.o -lm

main.o: main.cpp OctTree.h my_vec.h global.h
    g++ -g -o3 main.cpp -o main.o 

my_vec.o: my_vec.cpp my_vec.h
    g++ -g -o3 my_vec.cpp -o my_vec.o

OctTree.o: OctTree.cpp OctTree.h my_vec.h global.h
    g++ -g -o3 OctTree.cpp -o OctTree.o

runge_kutta.o: runge_kutta.cpp OctTree.h my_vec.h global.h
    g++ -g -o3 runge_kutta.cpp -o runge_kutta.o

initialize.o: initialize.cpp my_vec.h OctTree.h global.h
    g++ -g -o3 initialize.cpp -o initialize.o

global.o : global.cpp global.h
    g++ -g -o3 global.cpp -o global.o

clean: 
    rm main.o my_vec.o OctTree.o runge_kutta.o initialize.o global.o-f

gdb を実行しようとすると、次のメッセージが表示されます。

どうもありがとうございます!

4

2 に答える 2

1

You would be better off taking advantage of make's features to make your makefile easier to change. For example:

# all cpp files (add files here if you add more to your project)
SRC_FILES = main.cpp my_vec.cpp OctTree.cpp runge_kutta.cpp initialize.cpp global.cpp
OBJ_FILES = $(addsuffix .o,$(basename $(SRC_FILES))) # autogenerated

# flags, options, and other crap
OUTPUT = tree
CXX_FLAGS = -c -g # -O3 # disable optimization for now
CXX_FLAGS_LINK = -g
LIBS = -lm

# first target
all: tree

# tree target: requires all object files, links them into output executable
tree: $(OBJ_FILES)
    g++ $(CXX_FLAGS_LINK) -o $(OUTPUT) $(OBJFILES) $(LIBS)

# generic target for any cpp file
%.o: %.cpp
    g++ $(CXX_FLAGS) -o %.o %.cpp

# clean target
clean: 
    rm main.o my_vec.o OctTree.o runge_kutta.o initialize.o global.o -f

# specific dependencies for each file
# you can generate these with g++ -MM <filename.cpp>
main.o: main.cpp OctTree.h my_vec.h global.h
my_vec.o: my_vec.cpp my_vec.h
OctTree.o: OctTree.cpp OctTree.h my_vec.h global.h
runge_kutta.o: runge_kutta.cpp OctTree.h my_vec.h global.h
initialize.o: initialize.cpp my_vec.h OctTree.h global.h
global.o : global.cpp global.h

I suspect the issue you're having relates to the lengths the compiler is going to to efficientize your code at O3. Try again with no optimization and see if that works for you.

I have not tested this makefile at all.

Edit:

OK, you've tried disabling optimization. you've tried a make clean and recompile with optimization off? How are you launching the debugger? Leave optimization off, it doesn't get along well with debugging, even if GDB has a different gripe right now. Did you forget to rebuild your sources?

于 2012-08-27T13:51:34.170 に答える
1

gdb を実行しようとすると、次のメッセージが表示されます。

ビルドに実際にデバッグ情報が含まれていることは明らかです。したがって、ビルドしたもの以外のもの (の他のコピー) をデバッグしているに違いありませtree

あなたがすべき

  1. バイナリにデバッグ情報があることを確認します。例えば:

     cd /home/alexander/physics/computer/final
     readelf -wl tree | grep 'runge_kutta\.cpp'
    

    何らかの出力を生成する必要があります。と

     readelf -w tree
    

    多くの出力を生成する必要があります。

  2. このバイナリを emacs の外部でデバッグできることを確認します。

    gdb ./tree
    

    これは生成されるべきではありませんno debugging symbols found

  3. 次に、このバイナリを emacs でデバッグします。

    M-x gdb
    

    コマンドを完了するgdb /home/alexander/physics/computer/final/tree

    ステップ 2 が機能した場合、ステップ 3 でも生成されませんno debugging symbols found

于 2012-08-28T06:21:01.103 に答える