如何访问.gdbinit和gdb内部的环境变量?

时间:2012-03-21 23:11:03

标签: linux debugging gdb

我希望在使用gdb进行调试时设置源代码的路径。我选择使用.gdbinit文件。

基本上,它包含一个命令:

directory="/path/to/src".

但是,我希望能够将该命令指定为:

directory="$SOURCESROOT/src"

其中SOURCESROOT是一个环境变量。并且,如果可能的话,也可以通过输入directory=$SOURCESROOT/folder在gdb debuuging会话中执行此操作。

基本上,我希望访问gdb(或.gdbinit内部)环境变量。

但不是debugee的环境(设置env等),而是gdb本身的环境(即我首先输入的bash提示符“gdb program”)。

虽然在gdb会话中键入shell $SOURCESROOT会显示环境变量的内容,但这是无用的,因为我无法输入:directory=shell $SOURCESROOT

PS:任何人都找到了一个理想的设置Linux(Debian)下载带有“apt-get source”的源代码,用某种“apt-get update”utopic命令更新那些并安装它们以便gdb将自动找到这些来源?

4 个答案:

答案 0 :(得分:17)

没关系,我发现如何使用Python脚本来完成它。

我的.gdbinit文件现在是:

python
import os
gdb.execute('directory' + os.environ['SOURCES'] + '/package_name/src')
end

show directories

答案 1 :(得分:1)

如果你不想涉及python,那么这可行吗?

“显示环境[varname] 打印环境变量varname的值,以便在程序启动时提供给它。如果不提供varname,则打印要提供给程序的所有环境变量的名称和值。您可以将环境缩写为env。“

ftp://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_19.html

也许他们也可以用于条件:

https://www.adacore.com/gems/gem-119-gdb-scripting-part-1

答案 2 :(得分:1)

(已晚6年了!)

请勿将.gdbinit用于此目的。它不会扩展env vars。而是使用此命令行启动gdb:

gdb --init-eval-command="set dir $SOURCESROOT/src"

(gdb) show dir
/path/to/src

仅供参考,这项技术可用于设定其他关键变量,例如

gdb --eval-command="set sysroot $SYSROOTDIR"

sysroot

中设置了solib-absolute-prefixgdb

答案 3 :(得分:0)

在我的情况下,我想将全局历史设置为公用$HOME/.gdbinit,所以我使用了

set history filename ~/.gdb_history

代替

set history filename $HOME/.gdb_history