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

问题描述

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

在 GCC 中使用 -ffile-prefix-map=/path/to/build=src 选项到 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