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

naf*_*fmo 4 gcc gdb binary-reproducibility

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

在 GCC 中使用-ffile-prefix-map=/path/to/build=src选项来避免泄漏内部文件路径确实有助于使一些错误消息更清晰,但在使用 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)
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ick 5

GDB 有一些配置命令来指导它搜索源代码的方式。在您的情况下,如果您有源代码树并且需要更改路径前缀,则您需要做的就是设置替代路径DWARF-compilation- dir 实际目录。

set substitute-path src /path/to/build
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于我的设置,直到我将重新映射更改为“-ffile-prefix-map=/path/to/build=/src”,即向源添加前导斜杠。通过这一更改,“set replacement-path /src /path/to/build”工作正常! (4认同)