Как напечатать переменную по определенному условию в GDB? - PullRequest
5 голосов
/ 27 ноября 2010

Я хочу напечатать переменную в функции (которая вызывается несколько раз) для печати при каждом ее вызове.

Возможно ли сделать это автоматически через gdb ??Что-то вроде условной печати ...

что-то вроде ..

void func()
{ 
    if( t == 0 ) 
       x = z+1;
    else
       x = p+2; 
} 

Я хочу, чтобы переменная печаталась при t == 0, а в противном случае игнорировалась бы.

Ответы [ 3 ]

6 голосов
/ 27 ноября 2010

Это можно сделать с помощью комбинации команд breakpoint, condition и commands.

  1. Установить точку останова с помощью breakpoint func
  2. Сделать этоусловно с помощью condition t == 0
  3. Сделать точку останова распечаткой локальных переменных с помощью:

.

commands  
info locals  
end  

или определенных переменных с:

commands  
print t
print z
print x  
end  
3 голосов
/ 27 ноября 2010

Создайте точку останова в строке x=z+1, используйте 'command [breakpoint number], чтобы напечатать переменную и продолжить.

Это работает, потому что в коде есть ветвь.еще ветка.Вы также можете использовать 'break if условие' и выполнить команду.

0 голосов
/ 27 ноября 2010

Вы можете фактически сломаться в определенном месте при условии.

например. break sourcefile.c: 123 if x + y -foo (z) == 4. это приведет к разрыву строки 123 в sourcefile.c, если это выражение имеет значение true Затем вы можете распечатать любое значение, которое хотите (или продолжить до следующего выполнения условия)

...