Как получить доступ к переменным окружения внутри .gdbinit и внутри самого gdb?

Я хочу настроить путь для исходного кода при отладке с помощью gdb. Я решил сделать это с помощью файла .gdbinit.

В основном, он содержит команду:

directory="/path/to/src".

Однако я хотел бы указать эту команду как:

directory="$SOURCESROOT/src"

где SOURCESROOT - переменная среды. И, если возможно, возможность сделать это внутри сеанса дедупликации gdb, введя directory=$SOURCESROOT/folder.

В принципе, я ищу для доступа к внешним переменным среды gdb (или внутри .gdbinit).

Но не среда дебюта (set env и т.д.), а среда самого gdb (т.е. подсказки bash, где я печатаю в первую очередь "gdb-программу" ).

При вводе shell $SOURCESROOT внутри сеанса gdb отображается содержимое переменной среды, это совершенно бесполезно, поскольку я не могу ввести: directory=shell $SOURCESROOT.

PS: Кто-нибудь нашел идеальную установку для Linux (Debian) для загрузки источников с помощью "apt-get source", чтобы обновить их с помощью какой-то утопической команды apt-get update и установить их так, чтобы gdb автоматически найти эти источники?

Ответ 1

Nevermind, я нашел, как это сделать, используя скрипты Python.

Теперь мой файл .gdbinit:

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

show directories

Ответ 2

Если вы не хотите включать python, это может сработать?

"show environment [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

Ответ 3

(6 лет спустя!)

Не используйте .gdbinit для этой цели. Он не расширяет env vars. Вместо этого используйте эту командную строку для запуска gdb:

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

(gdb) show dir
/path/to/src

FYI этот метод может использоваться для установки других критических переменных, например

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

Что устанавливает sysroot и solib-absolute-prefix в gdb