gdb manual中包含以下部分:


如果别的

此命令允许有条件地将其包含在脚本中
执行的命令。 if命令采用单个参数,这是一个
表达评估...


当我使用数字表达式时,可以在gdbinit中执行测试,例如

if (42 == 42)
    print "42"
end


但是,当我想对String执行测试时,如下所示:

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命令来实现此目的,我想这个问题应该作为一个重复来解决。

最佳答案

如何实现呢?


如果您拥有带有嵌入式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)

10-05 19:27