GDB调试提示文件不存在求助:已设代码路径仍遇malloc/execvp报错
解决GDB调试时找不到malloc.c/execvp.c的问题
这问题我帮朋友排查过好多次,核心原因其实和你自己的代码路径没关系——你缺的是GNU C标准库(glibc)的调试源码包。
为什么会出现这个错误?
你用s命令单步进入的__GI___libc_malloc、__GI_execvp都是glibc里的系统函数,GDB要单步调试这些函数,必须能找到它们的源码文件。但默认情况下,大多数Linux发行版只会安装glibc的二进制库,不会自带源码,所以GDB自然找不到malloc.c、execvp.c。
而你用dir "path to my code files"设置的只是自己项目代码的搜索路径,对系统库的源码完全不起作用,这就是为什么设置了路径还是报错。
解决步骤
1. 安装glibc的调试源码包
根据你的发行版选择对应的命令:
Debian/Ubuntu 系列:
sudo apt update sudo apt install libc6-dbg glibc-source(如果提示找不到包,先确认
universe和multiverse软件源已经开启)RHEL/CentOS 系列:
sudo yum install glibc-debuginfo glibc-debuginfo-common(可能需要先开启debuginfo源,具体可以参考发行版文档)
2. 让GDB找到glibc源码
安装完成后,glibc的源码一般在/usr/src/glibc目录下。启动GDB后,用以下命令添加源码路径:
directory /usr/src/glibc
如果想永久生效,把这条命令写到你的~/.gdbinit文件里就行。
3. 备选方案:跳过系统库函数调试
如果你根本不想进入glibc的函数,只是想调试自己的代码,那更简单——用n(next命令)代替s(step命令)。next会直接执行完当前行的函数调用,不会进入函数内部,自然就不会触发找不到源码的错误。
内容的提问来源于stack exchange,提问作者Benny
相关产品推荐
相关产品推荐

