π 2019-Apr-22 ⬩ βοΈ Ashwin Nanjappa ⬩ π·οΈ environment variables, gdb ⬩ π Archive
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)