Using -ffile-prefix-map breaks debugging
Asked Answered
M

1

6

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?

Mulry answered 21/4, 2021 at 8:2 Comment(3)
Try adding the build directory to the source path (with the directory command).Ornamentation
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)?Mulry
See also this question for an additional insight.Anticyclone
B
7

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
Beaufert answered 21/4, 2021 at 13:50 Comment(1)
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!Mulry

© 2022 - 2024 — McMap. All rights reserved.