2010-11-27 3 views
5

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

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

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

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

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

+1

[This] [1] - хороший чип-лист GDB (у меня есть ламинированная двусторонняя копия на моя сторона всякий раз, когда я отлаживаю), а [это] [2] - хороший учебник. [1]: http://www.tacc.utexas.edu/fileadmin/class_materials/gdb_refcard.pdf [2]: http://www.unknownroad.com/rtfm/gdbtut/gdbuse.html – William 2010-11-27 04:09:26

+1

Ссылка на gdb refcard сломана. Его можно найти на archive.org по адресу http://web.archive.org/web/20100611221250/http://www.tacc.utexas.edu/fileadmin/class_materials/gdb_refcard.pdf – 2013-07-08 15:58:51

ответ

3

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

Это работает, потому что у вас есть ветка в коде.

Если нет ветки If-else. U также может использовать «break if condition» и выполнять команду.

6

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

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

.

commands 
info locals 
end 

или конкретные переменные с:

commands 
print t 
print z 
print x 
end 
0

вы можете сломать в определенном месте на состоянии.

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