首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单步执行,直到退出函数gdb

单步执行,直到退出函数gdb
EN

Stack Overflow用户
提问于 2012-06-30 00:46:55
回答 3查看 7.3K关注 0票数 5

我有一个项目,我正在工作,它有多个文件,我使用make来编译该项目。这是makefile

代码语言:javascript
运行
复制
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_readbloom-filter.c中的一个函数。即使使用适当的选项编译bloom-filter.c,我也无法理解为什么会发生这种情况

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-30 00:55:40

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

票数 5
EN

Stack Overflow用户

发布于 2015-02-04 22:12:42

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

票数 0
EN

Stack Overflow用户

发布于 2021-11-21 13:26:53

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

代码语言:javascript
运行
复制
# 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11265803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档