Друк усіх глобальних змін / локальних змінних?


337

Як я можу надрукувати всі глобальні змінні / локальні змінні? Це можливо в gdb?

Відповіді:


490

Введіть info variablesсписок "Усі глобальні та статичні імена змінних".

Введіть info localsсписок "Локальні змінні поточного кадру стека" (імена та значення), включаючи статичні змінні в цій функції.

Введіть info argsсписок "Аргументи поточного кадру стека" (назви та значення).


2
@ KennyTM, імена статичних змінних у висновку info variablesповинні бути статичними змінними в межах одиниці компіляції, правда?
cpuer

3
@cpuer: Не обов’язково. Він відображає лише ім'я в таблиці символів. Наприклад, з gcc на Mac статична змінна yперейменована y.1913на компіляцію.
kennytm

1
@KennyTM, чи не зберігаються статичні змінні всередині функції так само, як статичні змінні поза функцією (у таблиці символів)?
cpuer

2
@cpuer: Вони зберігаються однаково, але імена символів будуть різницею. Розглянемо, що у вас є статична змінна yфункція fooта інша yв bar. Щоб їх розрізнити, двом особам слід присвоїти інше ім'я y.
kennytm

1
@KennyTM, крім того, чи можна дістати там, де змінна оголошена і визначена відповідно?
cpuer

110

У випадку, якщо ви хочете побачити локальні змінні функції виклику, використовуйте select-frameранішеinfo locals

Наприклад:

(gdb) bt
#0  0xfec3c0b5 in _lwp_kill () from /lib/libc.so.1
#1  0xfec36f39 in thr_kill () from /lib/libc.so.1
#2  0xfebe3603 in raise () from /lib/libc.so.1
#3  0xfebc2961 in abort () from /lib/libc.so.1
#4  0xfebc2bef in _assert_c99 () from /lib/libc.so.1
#5  0x08053260 in main (argc=1, argv=0x8047958) at ber.c:480
(gdb) info locals
No symbol table info available.
(gdb) select-frame 5
(gdb) info locals
i = 28
(gdb) 

4
( select-frameможна скоротити як sel. Альтернативно використовувати frame/ f, які також друкують кадр)
user202729

27

Крім того, оскільки info localsне відображаються аргументи функції, в якій ви перебуваєте, використовуйте

(gdb) info args

Наприклад:

int main(int argc, char *argv[]) {
    argc = 6*7;    //Break here.
    return 0;
}

argcі argvне буде показано info locals. Повідомлення буде "Без місцевих жителів".

Довідка: команда інформації місцевих жителів .


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.