Подтвердить что ты не робот

Как объявить переменную в области данной функции с помощью GDB?

Я знаю, что gdb позволяет установить уже объявленную переменную с помощью команды set.

Возможно ли, чтобы gdb динамически объявлял новую переменную внутри области данной функции?

4b9b3361

Ответ 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
    }