Reading symbols from ...(no debugging symbols found)...done.不能打断点调试的原因

博客指出UNIX的调试工具GDB调试出现错误,原因是代码编译时未添加 -g 选项,解决办法是再次进入调试界面。

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

UNIX的调试工具GDB调试出现如下错误

Reading symbols from ...(no debugging symbols found)...done.

错误的原因是:代码编译时,未添加-g选项。

gcc -g -o test test.c

先写-g 再写 -o

再次进入调试界面即可

gdb test

 

执行调试命令以后出现下面输出,无法继续调试 ~ # id uid=0(root) gid=0(root) groups=0(root) ~ # gdb -p 567 GNU gdb (Debian 7.7.1+dfsg-5) 7.7.1 Copyright (C) 2014 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word". Attaching to process 567 Reading symbols from /opt/kerio/winroute/winroute...(no debugging symbols found)...done. Reading symbols from /opt/kerio/winroute/libkvnet.so...(no debugging symbols found)...done. Loaded symbols for /opt/kerio/winroute/libkvnet.so Reading symbols from /opt/kerio/winroute/libkipf.so...(no debugging symbols found)...done. Loaded symbols for /opt/kerio/winroute/libkipf.so Reading symbols from /lib/x86_64-linux-gnu/libpng12.so.0...(no debugging symbols found)...done. Loaded symbols for /lib/x86_64-linux-gnu/libpng12.so.0 Reading symbols from /usr/lib/x86_64-linux-gnu/libqrencode.so.3...(no debugging symbols found)...done. Loaded symbols for /usr/lib/x86_64-linux-gnu/libqrencode.so.3 Reading symbols from /usr/lib/x86_64-linux-gnu/libfbclient.so.2...(no debugging symbols found)...done. Loaded symbols for /usr/lib/x86_64-linux-gnu/libfbclient.so.2 Reading symbols from /opt/kerio/winroute/libkeriogl.so...(no debugging symbols found)...done. Loaded symbols for /opt/kerio/winroute/libkeriogl.so Reading symbols from /opt/kerio/winroute/libQtGui.so.4...(no debugging symbols found)...done. Loaded symbols for /opt/kerio/winroute/libQtGui.so.4 Reading symbols from /opt/kerio/winroute/libQtCore.so.4...(no debugging symbols found)...done. Loaded symbols for /opt/kerio/winroute/libQtCore.so.4 Reading symbols from /usr/lib/x86_64-linux-gnu/libfontconfig.so.1...(no debugging symbols found)...done. Loaded symbols for /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 Reading symbols from /opt/kerio/winroute/libkticonv.so.2...(no debugging symbols found)...done. Loaded symbols for /opt/kerio/winroute/libkticonv.so.2 Reading symbols from /lib/x86_64-linux-gnu/librt.so.1...(no debugging symbols found)...done. Loaded symbols for /lib/x86_64-linux-gnu/librt.so.1 Reading symbols from /lib/x86_64-linux-gnu/libpthread.so.0...(no debugging symbols found)...done. [New LWP 9920] [New LWP 1212] [New LWP 1177] [New LWP 1121] [New LWP 1075] [New LWP 1033] [New LWP 911] [New LWP 910] [New LWP 908] [New LWP 758] [New LWP 756] [New LWP 755] [New LWP 738] [New LWP 737]
03-08
<think>好的,我现在要解决用户提出的关于调试时遇到的“ld-uClibc.so.0: no debugging symbols found”问题。首先,我需要理解这个错误信息的含义。用户在使用GDB调试时,可能遇到了某个共享库(这里是ld-uClibc.so.0)缺少调试符号的情况,导致无法正确跟踪问题。 首先,根据用户提供的引用,特别是引用[1]和引用[2],我知道调试符号的问题通常与编译选项有关。比如,在Code::Blocks中需要开启-g选项来生成调试符号。而用户提到的问题是关于uClibc的,这可能涉及到交叉编译环境,比如在嵌入式开发中使用OpenWrt工具链。 接下来,我需要考虑可能的原因。根据引用[1],可能的原因包括GDB配置、路径中的中文字符、调试模式未启用以及缺少调试符号。这里用户的问题明确指向调试符号缺失,所以重点应放在编译选项和库的调试版本上。 首先,检查是否在编译uClibc时启用了调试符号。uClibc作为C库,如果在编译时没有使用-g选项,生成的库文件就不会包含调试信息。用户可能需要重新配置并编译uClibc,确保在编译参数中加入-g。这可能涉及到修改uClibc的Makefile或配置选项,比如在make menuconfig时启用调试选项。 其次,检查使用的GDB是否正确配置。根据引用[2],在交叉编译环境中,需要使用对应的工具链中的GDB,比如mipsel-openwrt-linux-gdb,并且设置solib-absolute-prefix指向包含调试符号的库路径。如果用户没有正确设置GDB的路径,或者调试符号所在的目录没有正确指定,GDB就无法找到对应的符号。 另外,还需要确认加载的库是否正确。有时,即使库本身有调试符号,但如果GDB加载的是系统默认路径下的库(没有调试信息),也会出现此问题。可以使用GDB的set命令来指定库的路径,确保加载的是带有调试符号的版本。 还有一个可能性是,用户正在调试的程序本身没有正确链接到带有调试符号的库。例如,在发布版中,库可能被剥离了调试信息,而调试版则保留。用户需要确认使用的是调试版本的库,或者在链接时包含了调试信息。 参考引用[4],如果通过打印语句调试不够,需要更深入的调试信息,那么确保所有相关组件都有调试符号是关键。因此,可能需要重新编译整个工具链,包括uClibc,并确保每个步骤都启用了调试选项。 总结解决步骤:1. 检查uClibc的编译选项,确保包含-g;2. 确认使用正确的GDB并配置库路径;3. 确保程序链接到带有调试符号的库版本;4. 必要时重新编译整个工具链和依赖库。 用户可能需要具体指导如何修改编译选项,例如在OpenWrt环境中如何配置,或者如何设置GDB的solib路径。此外,如果用户的环境中有其他依赖库也缺少调试符号,可能需要逐一检查并重新编译它们。</think>### 调试`ld-uClibc.so.0`符号缺失问题解决步骤 #### 1. **确认调试符号是否生成** - **检查uClibc编译配置**: 若`ld-uClibc.so.0`是通过源码编译的,需确保编译时启用了调试符号。在编译配置中添加`-g`选项: ```bash # 在uClibc源码目录中执行 make menuconfig # 进入配置界面,启用调试选项(如"Build with debug symbols") make CFLAGS="-g -O0" # 强制添加-g并关闭优化 ``` 若使用OpenWrt等嵌入式工具链,需在工具链编译配置中启用调试支持[^1][^2]。 #### 2. **配置GDB加载调试符号** - **指定调试符号路径**: 在GDB中通过`set solib-absolute-prefix`指向包含调试符号的库路径: ```gdb (gdb) set solib-absolute-prefix /path/to/debug-root # 替换为实际路径[^2] ``` - **验证库加载路径**: 使用`info sharedlibrary`命令检查GDB加载的库路径是否包含调试版本: ```gdb (gdb) info sharedlibrary ``` #### 3. **检查程序与库的链接** - **确认程序链接的库版本**: 通过`readelf`或`ldd`检查程序依赖的`ld-uClibc.so.0`路径: ```bash readelf -d your_program | grep uClibc # 查看动态库链接信息 ldd your_program | grep uClibc # 显示运行时加载的库路径 ``` 确保链接的是包含调试符号的版本(如`libc.so`未剥离调试信息)。 #### 4. **重新编译并替换库文件** - **替换调试版库文件**: 将编译生成的带调试符号的`ld-uClibc.so.0`替换到目标系统的库路径中: ```bash cp /path/to/uClibc-build/lib/ld-uClibc.so.0 /target/lib/ ``` - **避免符号剥离**: 某些构建系统(如OpenWrt)默认会剥离符号,需在编译配置中禁用: ```bash # 在OpenWrt的make menuconfig中 Advanced configuration options → Enable debug symbols ``` #### 5. **使用GDB调试核心转储** - **加载核心文件**: 若程序崩溃,通过核心文件定位问题: ```gdb mipsel-openwrt-linux-gdb your_program # 使用交叉编译环境的GDB (gdb) core-file core.xxxx # 加载核心转储文件 (gdb) bt # 查看调用栈[^3] ``` ### 相关问题 1. **如何交叉编译带调试符号的uClibc库?** (涉及工具链配置和编译参数调整) 2. **GDB调试嵌入式程序时如何正确加载符号表?** (需配置`solib-search-path`和`sysroot`) 3. **如何分析动态库加载失败导致的段错误?** (结合`dmesg`和`addr2line`定位崩溃位置) 通过上述步骤,可系统化解决调试符号缺失问题,确保GDB能够正确解析`ld-uClibc.so.0`的符号信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值