2010-11-27 338 views
5

我希望在每次调用函数时打印一个函数中的变量(称为 多次)。如何在gdb的特定条件下打印变量?

是否可以通过gdb自动执行此操作?东西 像条件打印...

像..

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

我想要的变量当t == 0 和忽略,否则将被打印..

+1

[这] [1]是一个很好的GDB“作弊表”(我有一个层压双面副本在每当我调试我的身边),[this] [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分支。你也可以使用'break if condition'来执行命令。

6

这可以通过命令breakpointconditioncommands的组合来完成。

  1. 设置与breakpoint func
  2. 断点是有条件通过condition t == 0
  3. 使断点打印局部变量有:

commands 
info locals 
end 

或与特定变量:

commands 
print t 
print z 
print x 
end 
0

您可以在一个条件的特定的地方竟打破。

例如如果x + y -foo(z)== 4,则打开sourcefile.c:123.如果该表达式的计算结果为true,则将在sourcefile.c的第123行中断开。然后你可以打印任何你想要的值(或者继续下去,直到下一次条件满足为止)