WSL调试Busybox时GDB无法找到glibc的resolv/ns_parse.c调试符号
解决GDB无法找到glibc中
./resolv/ns_parse.c源码的问题 libc6-dbg仅提供glibc的调试符号,不包含实际的源码文件,GDB需要对应版本的glibc源码才能定位到ns_parse.c的代码行。按以下步骤操作:
1. 确认当前系统的glibc版本
执行命令查看系统使用的glibc版本:
ldd --version
或者直接查看libc库的版本信息:
/lib/x86_64-linux-gnu/libc.so.6
记下输出中的版本号(比如2.35-0ubuntu3.1)。
2. 下载对应版本的glibc源码
使用apt下载匹配版本的glibc源码包:
apt source libc6
执行后会在当前目录生成glibc的源码目录(比如glibc-2.35)。
3. 让GDB关联源码路径
有两种方式让GDB找到ns_parse.c:
临时设置(仅当前GDB会话生效)
在GDB中执行以下命令,将调试符号中记录的./resolv路径替换为实际源码中的resolv目录路径:
set substitute-path ./resolv /path/to/glibc-source/resolv
例如,如果源码在/tmp/glibc-2.35,则命令为:
set substitute-path ./resolv /tmp/glibc-2.35/resolv
永久设置(所有GDB会话生效)
编辑用户目录下的.gdbinit文件(如果不存在则创建),添加上述set substitute-path命令:
echo 'set substitute-path ./resolv /path/to/glibc-source/resolv' >> ~/.gdbinit
完成后重新启动GDB,再次单步进入ns_initparse时,就能定位到ns_parse.c的源码行。
内容的提问来源于stack exchange,提问作者ciis0
相关产品推荐
相关产品推荐

