GDB inherits the environment variables from your shell. Some environment variables, like
LD_LIBRARY_PATH, might not be inherited for safety reasons. This can cause errors like this when you try to debug:
$ gdb --args ./a.out (gdb) r /path/to/a.out: error while loading shared libraries: libfoobar.so.5: cannot open shared object file: No such file or directory
You can set the
LD_LIBRARY_PATH environment variable at the gdb shell using the set env command like this:
(gdb) set env LD_LIBRARY_PATH /path/to/1:/path/to/2
However, if you use a shell like Fish, you will notice that this will silently not work and you still get the cannot open shared object file error.
This is because under the covers, gdb is reading the
SHELL environment variable to understand what is the shell and doing what is right for that shell. It might not understand how to work with the Fish, which is a relatively new shell.
The solution that works for me, is to set the
SHELL variable at the Fish shell to the Bash path:
$ set SHELL (which bash)
And then launch gdb and set the environment variable as shown above. It works after that.
Reference: Your program’s environment (GDB Manual)