我希望在每次調用函數時打印一個函數中的變量(稱爲 多次)。如何在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