C++ no debugging symbol found

本文探讨了一位开发者在使用gdb调试C++程序时遇到的无调试符号问题,并尝试通过修改Makefile添加-g标志来解决该问题。文章还提供了一个Stack Overflow链接作为进一步的参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++ no debugging symbol found

这个问题困扰我很久,因为网上的答案大都大同小异:
分为两种:
1,是使用g++命令,然后加上-g参数,
2,是在Makefile文件中添加CFLAG+=-g

这些我都是知道的,但对我的问题一直没有本质上的解决。

问题描述

在Makefile中添加-g选项。上述第2点针对c源程序解决得很完美,但是到我这里还是失效。先贴出我的Makefile文件:

PROGS = main

CLEANFILES = core core.* *.core *.o temp.* *.out typescript* \
        *.lc *.lh *.bsdi *.sparc *.uw
all: ${PROGS}

CC=g++
CFLAGS+=-g#gdb调试
main: main.o noncopyabletest.o
    ${CC} ${CFLAGS} -o $@ $^
    @rm *.o

clean:
    rm -f ${PROGS} ${CLEANFILES}

这里我的source code是:

main.cpp noncopyabletest.cpp noncopyabletest.h

执行gdb执行后,出现no debugging symbol found

现在的问题是,我明明加上了-g选项

解决办法

参考:http://stackoverflow.com/questions/20261160/gdb-no-debugging-symbols-found

在编C++程序时,使用CXX和CXXFLAG变量。

<think>好的,用户现在遇到了“no debugging symbol found”的问题,这通常是因为可执行文件缺少调试符号。我需要解释这个问题的原因,并给出解决方法。首先,用户可能是在使用GDB调试时看到这个提示,所以需要说明调试符号的作用,然后分步骤介绍如何安装调试符号包。不同的Linux发行版安装方式不同,比如Debian/Ubuntu用apt安装dbgsym包,Fedora/CentOS用debuginfo-install,Arch可能需要启用debug仓库。另外,也可以手动添加调试符号,比如用strip命令提取,但可能不太常用。还要提到检查是否安装成功的方法,比如用readelf -S查看符号表。最后,用户可能需要知道为什么系统默认不包含调试符号,可能是为了减小文件大小和保护隐私。 接下来需要生成相关问题,要围绕调试符号的安装、检查、手动添加方法,以及不同发行版的处理方式等。比如如何确认是否已安装调试符号,手动添加的步骤,不同发行版的具体命令,安装后如何验证,以及调试符号缺失对调试的影响等。需要确保问题具体且相关,符合用户可能的后续疑问。 </think>“no debugging symbol found”(未找到调试符号)是GDB调试时常见的提示,意味着当前被调试的可执行文件(如`gnome-terminal`)未包含调试所需的符号信息(如函数名、变量名、行号等)。这会导致GDB无法准确显示程序结构,调试时只能看到地址而非有意义的符号名,影响调试效率。 ### 原因 大多数Linux发行版的系统二进制文件(如`/usr/bin`下的程序)默认**不包含调试符号**。调试符号会显著增加文件体积(可能增大数倍甚至数十倍),因此通常以独立的“调试符号包”形式提供,用户需按需安装。 ### 解决方法 #### 方法1:安装系统提供的调试符号包(推荐) 不同发行版的调试符号包命名和安装方式不同: - **Debian/Ubuntu**: 调试符号包通常以`-dbgsym`后缀命名(如`gnome-terminal-dbgsym`)。需先启用`deb-src`源和调试符号仓库(`deb http://ddebs.ubuntu.com $(lsb_release -cs) main restricted universe multiverse`),然后通过`apt`安装: ```bash sudo apt install gnome-terminal-dbgsym ``` - **Fedora/RHEL/CentOS**: 调试符号包以`-debuginfo`后缀命名(如`gnome-terminal-debuginfo`),需启用`debuginfo`仓库(通过`yum install -y yum-utils && debuginfo-install gnome-terminal`自动安装依赖的调试包)。 - **Arch Linux**: 需启用`[debug]`仓库(在`/etc/pacman.conf`中取消注释),然后安装对应包(如`gnome-terminal-debug`)。 #### 方法2:手动添加调试符号(备用) 若系统未提供调试符号包,可手动从原始可执行文件中提取调试符号(需保留原始二进制文件): 1. 备份原文件: ```bash cp /usr/bin/gnome-terminal /usr/bin/gnome-terminal.orig ``` 2. 提取调试符号到独立文件: ```bash objcopy --only-keep-debug /usr/bin/gnome-terminal.orig /usr/bin/gnome-terminal.debug ``` 3. 移除原文件中的调试符号(减小体积)并关联调试符号文件: ```bash strip --strip-debug --strip-unneeded /usr/bin/gnome-terminal.orig -o /usr/bin/gnome-terminal objcopy --add-gnu-debuglink=/usr/bin/gnome-terminal.debug /usr/bin/gnome-terminal ``` 此后GDB调试时会自动读取`.debug`文件。 #### 验证调试符号是否生效 安装或手动添加后,用`readelf -S /usr/bin/gnome-terminal`检查是否存在`.debug_*`节(如`.debug_info`),若有则表示调试符号已加载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值