我希望在每次调用函数时打印一个函数中的变量(称为 多次)。如何在gdb的特定条件下打印变量?
是否可以通过gdb自动执行此操作?东西 像条件打印...
像..
void func()
{
if(t == 0)
x = z+1;
else
x = p+2;
}
我想要的变量当t == 0 和忽略,否则将被打印..
我希望在每次调用函数时打印一个函数中的变量(称为 多次)。如何在gdb的特定条件下打印变量?
是否可以通过gdb自动执行此操作?东西 像条件打印...
像..
void func()
{
if(t == 0)
x = z+1;
else
x = p+2;
}
我想要的变量当t == 0 和忽略,否则将被打印..
在行做一个断点x=z+1
,使用'command [breakpoint number]
打印变量并继续。
这是有效的,因为你在代码中有分支。
如果没有if-else分支。你也可以使用'break if condition'来执行命令。
这可以通过命令breakpoint
,condition
和commands
的组合来完成。
breakpoint func
condition t == 0
。
commands
info locals
end
或与特定变量:
commands
print t
print z
print x
end
您可以在一个条件的特定的地方竟打破。
例如如果x + y -foo(z)== 4,则打开sourcefile.c:123.如果该表达式的计算结果为true,则将在sourcefile.c的第123行中断开。然后你可以打印任何你想要的值(或者继续下去,直到下一次条件满足为止)
[这] [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
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