I want to run gdb with only a single variable MyVar in its environment. 
However, the variable's contents are rather complex, containing non-printable ASCII, and so is best set using e.g. MyVar=$(python -c 'print("\xff...")').
I'm left with two options:
Set the MyVar in bash before running gdb. Then inside gdb, remove all other environment variables individually using unset environment NAME (very tedious!).
Clear all environment variables using unset environment. Then inside gdb, set MyVar using a shell command (as above) (how?)
Any ideas?
Option 2 is possible.
(gdb) unset environment
(gdb) python gdb.execute("set environment Myvar=\xff")
(gdb) show environment 
Myvar=ÿ
Option 1 can be done with env(1).
$ env -i MyVar=$(python -c 'print("xyz")') gdb
(gdb) show environment
MyVar=xyz
LINES=35
COLUMNS=80
Then you just have to clear LINES and COLUMNS.
When starting gdb from shell command-line, you can specify which program to run, with which arguments (with --args), and even modify the environment of the program with the help of env!
I just did it successfully like this:
gdb --ex=run --args env LD_BIND=now LD_DEBUG=libs \
apt-get install --yes $(cat pkgs-to-install-to-crash-apt)
--ex=run is to ask gdb to run it immediately.
In your case, you would do env -i.
It differs from the suggested env -i VAR=... gdb program in that only your examined program is under the special environment, but not gdb.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With