Как объявить переменную в области данной функции с помощью GDB?
Я знаю, что gdb позволяет установить уже объявленную переменную с помощью команды set.
Возможно ли, чтобы gdb динамически объявлял новую переменную внутри области данной функции?
Ответ 1
Для C (и, вероятно, С++) кода это было бы очень сложно, так как это в большинстве реализаций включало бы смещение указателя стека, из-за чего сбой кода функции завершился бы из-за того, что он больше не соответствовал размеру стека Рамка. Также весь код в функции, которая обращается к локальным переменным, внезапно рискует попасть в неправильное место, что тоже плохо.
Итак, я так не думаю, нет.
Ответ 2
Вы можете динамически выделять некоторое пространство и использовать его для хранения новой переменной. В зависимости от того, что вы подразумеваете под "областью действия текущей функции", это может быть не то, что вы хотите.
Но вот как это выглядит, когда у вас есть функция func(), которая принимает указатель на выходной параметр:
set $foo = malloc(sizeof(struct funcOutStruct))
func($foo)
p *$foo
free($foo)
Ответ 3
что я использовал для печати переменных
(gdb) set $path=((ngx_path_t **)ngx_cycle->paths.elts)[2]
(gdb) print *$path
$16 = {
name = {
len = 29,
data = 0x80ed15c "/usr/local/nginx/fastcgi_temp"
},
len = 5,
level = {1, 2, 0},
manager = 0,
loader = 0,
data = 0x0,
conf_file = 0x0,
line = 0
}