GDB无法找到全部源文件的问题排查求助
GDB仅能找到部分源文件的排查与解决
一、查看GDB搜索源文件的尝试路径
要确认GDB是否尝试过搜索目标路径,可使用以下命令:
- 启用 verbose 模式,GDB会输出所有寻找源文件的细节,包括每一次尝试的路径:
执行后切换到对应栈帧(比如set verbose onframe 14)或执行list命令,就能在输出里看到GDB查找文件的全过程。 - 查看当前配置的源文件搜索目录列表:
show directories - 列出GDB已经成功找到的所有源文件:
info sources
二、解决路径替换无效的方案
从栈帧输出看,部分文件调试信息记录的是相对路径(GDB能自动匹配到本地文件),另一部分是Jenkins编译机的绝对路径(本地不存在)。针对substitute-path无效的问题,试试以下步骤:
- 先清空已有路径替换规则,避免规则冲突:
unset substitute-path /home/jenkins/workspace/Official_Builds_Pipeline/mclinux/src/ unset substitute-path /home/jenkins/workspace/Official_Builds_Pipeline/mclinux/ - 重新设置替换规则,不要在路径末尾加斜杠,确保目标路径是本地真实存在的目录:
GDB会按设置的顺序匹配路径,这条规则会把编译机上的绝对路径前缀替换为你的本地路径。set substitute-path /home/jenkins/workspace/Official_Builds_Pipeline/mclinux/src /home/user/mcgit/code/FMW-74565/coredumpout_16_29_52/mclinux/src - 手动添加本地源文件根目录到GDB的搜索路径:
directory /home/user/mcgit/code/FMW-74565/coredumpout_16_29_52/mclinux/src - 额外检查:确认编译时使用了完整的调试信息参数
-g(而非-g1,后者会丢失部分路径信息),同时确认编译时的工作目录是否统一——如果部分文件是在不同目录下编译的,调试信息里的路径格式会不一致,导致GDB匹配失败。
内容的提问来源于stack exchange,提问作者JoeManiaci
相关产品推荐
相关产品推荐

