2

At $DAYJOB, I am trying to implement reproducible builds to make debugging released software where we no longer have the full debug versions on our build servers easier, using the tips from reproducible-builds.org.

Using the -ffile-prefix-map=/path/to/build=src option in GCC to avoid leaking internal file paths does help making some error messages cleaner, but does produce problems when using GDB. I am in /path/to/build/some/binary/ and hitting a breakpoint in /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)

As a workaround, I can symlink src to the root of the build tree, but is there a better way to make sure gdb understands the mapping?

nafmo
  • 448
  • 4
  • 19
  • Try adding the build directory to the [source path](https://sourceware.org/gdb/current/onlinedocs/gdb/Source-Path.html#index-default-source-path-substitution) (with the `directory` command). – ssbssa Apr 21 '21 at 10:27
  • I guess I would also need to remove the `src` component from the rewrite, since this does not actually exist (unless the source repo is checked out as `src`)? – nafmo Apr 21 '21 at 12:57

1 Answers1

4

GDB has a few configuration commands to direct the way it searches for source code. In your case, where you have a tree of source code and you need to change a path prefix, set substitute-path DWARF-compilation-dir actual-dir should be all you need to do.

set substitute-path src /path/to/build
Mark Plotnick
  • 9,598
  • 1
  • 24
  • 40
  • 4
    That did not work with my setup, until I changed the remapping to `-ffile-prefix-map=/path/to/build=/src`, i.e., adding a leading slash to the source. With that change, `set substitute-path /src /path/to/build` works fine! – nafmo Apr 22 '21 at 08:11