如何根据environnment

问题描述:

gdb manual有一部分有条件在gdbinit有这一部分:如何根据environnment

如果其他

该命令允许在你的脚本有条件 执行的命令包括。 IF命令接受一个参数,这是一个 表达式计算...

我可以在我的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?

如果没有办法与“纯” gdb命令来实现这一点,我想这个问题应该停课一个副本。

+0

你尝试像'(STRCMP($ myVar的, “你好”)== 0' –

+0

它产生“如果没有进程调试,你就无法做到这一点”。错误...执行这种操作需要进行python调用有点令人难过,但它同时打开了一个新的视角。 – Guillaume

+0

是的,我 –

如何实现这一目标?

如果您拥有内嵌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) 
+0

是的,这是明显的方式,在这种情况下,我的问题是重复的...恕我直言,很遗憾,需要运行一个基于env变量的简单测试的Python脚本... – Guillaume