2010-11-27 78 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行中斷開。然後你可以打印任何你想要的值(或者繼續下去,直到下一次條件滿足爲止)