Добавление новых символов в GDB - PullRequest
0 голосов
/ 11 октября 2019

Возможно ли в gdb определять переменные без загрузки этих переменных в файл? Например:

>>> set var i=4 # how to do int i=4; ?
No symbol table is loaded.  Use the "file" command.

По сути, я хотел бы использовать gdb как способ узнать немного больше о языке и определить переменные в приглашении (например, приглашение Python) без необходимости иметьэти переменные предварительно загружены в файл.

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Поскольку целью gdb является проверка программ, обычное предположение в выражениях состоит в том, что идентификатор именует некоторую переменную, принадлежащую текущей программе. Но GDB также имеет «удобные переменные отладчика». Имя, начинающееся с символа $, представляет собой либо регистр (один из нескольких, определяемых целевой архитектурой ЦП исполняемого файла), либо вспомогательную переменную отладчика.

Итак:

(gdb) set $i = 4

ОднакоЯ определенно не рекомендую использовать их «как способ узнать немного больше о языке». GDB будет поддерживать большую часть синтаксиса C для выражений, которые их включают, но это только фальсификация, и они на самом деле совсем не такие, как переменная C. Только для одного примера вспомогательная переменная никогда не имеет адреса. Таким образом, любой эксперимент с этими переменными просто выявит поведение языка подсказок gdb и такого рода переменных, которые не всегда будут такими же, как язык C и его переменные.

1 голос
/ 11 октября 2019

Вы можете сделать это с помощью вспомогательных переменных .

set $myvar = 15

Затем вы можете напечатать их значение как любую другую переменную

p $myvar

Обратите внимание, что вспомогательные переменные существуютполностью внутри gdb и никак не влияет на отлаживаемую программу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...