如何根据环境在 gdbinit 中有条件部分
how to have conditional part in gdbinit based on the environnment
在gdb manual中有这部分:
if else
This command allows to include in your script conditionally
executed commands. The if command takes a single argument, which is an
expression to evaluate...
当我使用数字表达式时,我可以在我的 gdbinit 中执行测试,比如
if (42 == 42)
print "42"
end
但是当我想对一个字符串进行测试时,像这样:
if ("a" == "a")
print "yes"
end
然后我在启动 gdb 时遇到错误:
.gdbinit:45: Error in sourced command file:
You can't do that without a process to debug.
我尝试查找表达式语法的文档或示例以编写我的条件块,但未成功。
我想实现的是添加一堆基于环境变量的命令。所以我需要在我的 gdbinit 中有这样的部分:
if ("${myEnvVar}" == "someSpecialValue")
#my set of special values
end
如何实现?
编辑:看起来最简单的方法是使用python来执行这种操作:How to access environment variables inside .gdbinit and inside gdb itself?
如果无法使用 'pure' gdb 命令实现此目的,我想这个问题应该作为重复问题关闭。
How to achieve that ?
如果你有嵌入式 Python 的 GDB(最近的 GDB 版本有),你就可以使用 Python 的全部功能。
例如:
# ~/.gdbinit
source ~/.gdbinit.py
# ~/.gdbinit.py
import os
h = os.getenv("MY_ENV_VAR")
if h:
print "MY_ENV_VAR =", h
gdb.execute("set history size 100")
# Put other settings here ...
else:
print "MY_ENV_VAR is unset"
让我们看看它是否有效:
$ gdb -q
MY_ENV_VAR is unset
(gdb) q
$ MY_ENV_VAR=abc gdb -q
MY_ENV_VAR = abc
(gdb)
在gdb manual中有这部分:
if else
This command allows to include in your script conditionally executed commands. The if command takes a single argument, which is an expression to evaluate...
当我使用数字表达式时,我可以在我的 gdbinit 中执行测试,比如
if (42 == 42)
print "42"
end
但是当我想对一个字符串进行测试时,像这样:
if ("a" == "a")
print "yes"
end
然后我在启动 gdb 时遇到错误:
.gdbinit:45: Error in sourced command file:
You can't do that without a process to debug.
我尝试查找表达式语法的文档或示例以编写我的条件块,但未成功。
我想实现的是添加一堆基于环境变量的命令。所以我需要在我的 gdbinit 中有这样的部分:
if ("${myEnvVar}" == "someSpecialValue")
#my set of special values
end
如何实现?
编辑:看起来最简单的方法是使用python来执行这种操作:How to access environment variables inside .gdbinit and inside gdb itself?
如果无法使用 'pure' gdb 命令实现此目的,我想这个问题应该作为重复问题关闭。
How to achieve that ?
如果你有嵌入式 Python 的 GDB(最近的 GDB 版本有),你就可以使用 Python 的全部功能。
例如:
# ~/.gdbinit
source ~/.gdbinit.py
# ~/.gdbinit.py
import os
h = os.getenv("MY_ENV_VAR")
if h:
print "MY_ENV_VAR =", h
gdb.execute("set history size 100")
# Put other settings here ...
else:
print "MY_ENV_VAR is unset"
让我们看看它是否有效:
$ gdb -q
MY_ENV_VAR is unset
(gdb) q
$ MY_ENV_VAR=abc gdb -q
MY_ENV_VAR = abc
(gdb)