使用 -ffile-prefix-map 中断调试

Using -ffile-prefix-map breaks debugging

在 $DAYJOB,我正在尝试实施可重现的构建,以便使用 reproducible-builds.org.[=14= 中的提示,在我们的构建服务器上不再拥有完整调试版本的情况下更轻松地调试已发布的软件]

使用 -ffile-prefix-map=/path/to/build=src option in GCC to avoid leaking internal file paths 确实有助于使一些错误消息更清晰,但在使用 GDB 时确实会产生问题。我在 /path/to/build/some/binary/ 并在 /path/to/build/lib/cclib/:

中遇到断点
Breakpoint 1, [...]
at src/lib/cclib/eventloop.cc:154
154    src/lib/cclib/eventloop.cc: No such file or directory.
(gdb)

作为解决方法,我可以将 src 符号链接到构建树的根目录,但是是否有更好的方法来确保 gdb 理解映射?

GDB 有一些配置命令来指导它搜索源代码的方式。在您的情况下,如果您有一棵源代码树并且需要更改路径前缀,那么 set substitute-path DWARF-compilation-dir actual-dir 应该就是您需要做的所有事情。

set substitute-path src /path/to/build