5

我有一个正在处理的项目,它有多个文件,我使用 make 来编译项目。这是生成文件

CC =  /opt/gcc-4.7-cilkplus/bin/gcc
CFLAGS = -ggdb3 -Wall
COMPLILEFLAGS = `mysql_config --include` -I/opt/gcc-4.7-cilkplus/include/
LINKERINFO = `mysql_config --cflags --libs` -lrt -lm -lz
CILKFLAGS = -lcilkrts

# To be provided at the commandline
DIR = './bloom'
MODE = '2'
FILENAME = 'database.info'

exec: main.o mysql-client.o databaseConnection-common.o murmurhash3.o bloom-filter.o md5.o auxilary-functions.o
    $(CC) $(CFLAGS) -o exec main.o mysql-client.o databaseConnection-common.o murmurhash3.o bloom-filter.o \
    md5.o auxilary-functions.c $(LINKERINFO) $(CILKFLAGS)

main.o: main.c mysql-client.h databaseConnection-common.h bloom-filter.h
    $(CC) $(CFLAGS) $(COMPLILEFLAGS) -c main.c $(CILKFLAGS)

bloom-filter.o: bloom-filter.c bloom-filter.h murmurhash3.h auxilary-functions.h 
    $(CC) $(CFLAGS) $(COMPLILEFLAGS) -c bloom-filter.c

murmurhash3.o: murmurhash3.c murmurhash3.h
    $(CC) $(CFLAGS) -c murmurhash3.c

md5.o: md5.c md5.h
    $(CC) $(CFLAGS) -c md5.c

mysql-client.o: mysql-client.c mysql-client.h databaseConnection-common.h
    $(CC) $(CFLAGS) $(COMPLILEFLAGS) -c mysql-client.c

databaseConnection-common.o: databaseConnection-common.c databaseConnection-common.h
    $(CC) $(CFLAGS) $(COMPLILEFLAGS) -c databaseConnection-common.c

auxilary-functions.o: auxilary-functions.h auxilary-functions.c
    $(CC) $(CFLAGS) -c auxilary-functions.c

run:
    ./exec $(MODE) $(FILENAME) $(DIR)

我设置breakpoint在某个位置,然后在next那里形成,但我得到了

Single stepping until exit from function bf_dup_eleminate_read, which has no line number information.

bf_dup_eleminate_read是 中的一个函数bloom-filter.c。即使bloom-filter.c使用正确的选项编译,我也无法理解为什么会发生这种情况

4

3 回答 3

5

我在任何地方都看不到-g国旗。它通知编译器发出调试信息,因此如果您希望 gdb 显示行号,则需要将其添加到编译行。

于 2012-06-29T16:55:40.393 回答
0

尝试更新您的 gdb。可能是你的gcc版本太新了。我遇到了同样的问题并在更新我的 gdb 后修复了它。

于 2015-02-04T14:12:42.107 回答
0

好吧,它是 2021 年,所以现在情况有些不同了。通常,我发现该-ggdb标志更有用。它不仅更冗长,而且似乎更不容易出错(但这是我的观点)。您还需要确保将-ggdb标志添加到所有目标文件中。提供某种参考,以及一种更可靠的方式来让您的项目在没有按预期调试的情况下进行。这是我刚刚构建并成功调试的项目的一个片段VSCode v1.62.1。它是用 编译GNU C++ Compiler g++ 10.3,用 调试GNU Debugger gdb v9.2,并使用 make 命令构建的GNU Make 4.2.1

# Here is an example from my current project that I debug on vscode
TARGET = A10
ALL = fraction.o main.o
GCC = g++
FLAGS = -Wall -c

${TARGET}: fraction.o main.o
    ${GCC} -Wall -ggdb ${ALL} -o ${TARGET}

main.o: main.cpp fraction.h
    ${GCC} -Wall -ggdb -c main.cpp

fraction.o: fraction.cpp fraction.h
    ${GCC} -Wall -ggdb -c fraction.cpp fraction.h

于 2021-11-21T13:26:53.030 回答