如何使用shell命令在GDB中设置环境变量?

Shu*_*eng 5 linux x86 gdb

我只想在其环境中运行gdb一个变量MyVar

但是,变量的内容非常复杂,包含不可打印的ASCII,因此最好使用例如设置MyVar=$(python -c 'print("\xff...")')

我有两个选择:

  1. 在运行之前设置MyVarin 。然后在内部,使用(非常乏味!)单独删除所有其他环境变量。bashgdbgdbunset environment NAME

  2. 使用清除所有环境变量unset environment。然后在内部gdbMyVar使用shell命令进行设置(如上所述)(如何?)

有任何想法吗?

imz*_*hev 9

当从 shell 命令行启动 gdb 时,您可以指定要运行哪个程序、使用哪些参数(使用--argsenv ,甚至可以在!的帮助下修改程序的环境。

我刚刚成功地这样做了:

gdb --ex=run --args env LD_BIND_NOW=1 LD_DEBUG=libs \
apt-get install --yes $(cat pkgs-to-install-to-crash-apt)
Run Code Online (Sandbox Code Playgroud)

--ex=run就是让gdb立即运行它。

就你而言,你会这样做env -i

与建议的不同之处在于env -i VAR=... gdb program,只有您检查的程序在特殊环境下,而不是gdb。

  • 尽管我的答案被接受了,但我更喜欢这个,因为它不会影响 gdb 本身。 (3认同)

jam*_*nan 7

选项 2 是可能的

\n\n
(gdb) unset environment\n(gdb) python gdb.execute("set environment Myvar=\\xff")\n(gdb) show environment \nMyvar=\xc3\xbf\n
Run Code Online (Sandbox Code Playgroud)\n\n

选项 1 可以通过 来完成env(1)

\n\n
$ env -i MyVar=$(python -c \'print("xyz")\') gdb\n(gdb) show environment\nMyVar=xyz\nLINES=35\nCOLUMNS=80\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后你只需要清除行和列。

\n

  • 如果您需要使用自定义环境运行程序,最好不要在 `env` 下运行整个 gdb,而只使用 `gdb --args env ...` 运行程序,如 https:// /stackoverflow.com/a/60571461/94687 (2认同)

归档时间:

查看次数:

440 次

最近记录:

6 年,10 月 前