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