如何在gdb中打印特定条件下的变量?
Posted
技术标签:
【中文标题】如何在gdb中打印特定条件下的变量?【英文标题】:How to print a variable on a particular condition in gdb? 【发布时间】:2010-11-27 03:03:19 【问题描述】:我希望在函数中打印变量(称为 多次)在每次调用函数时打印。
是否可以通过 gdb 自动执行此操作?某物 像条件打印...
有点像..
void func()
if( t == 0 )
x = z+1;
else
x = p+2;
我希望在 t == 0 时打印变量 否则忽略..
【问题讨论】:
[This][1] 是一个不错的 GDB“备忘单”(每当我调试时,我身边都有一个层压双面副本),并且 [this][2 ] 是一个很好的教程。 [1]:tacc.utexas.edu/fileadmin/class_materials/gdb_refcard.pdf [2]:unknownroad.com/rtfm/gdbtut/gdbuse.html gdb refcard 链接已损坏。可以在archive.org 上找到web.archive.org/web/20100611221250/http://www.tacc.utexas.edu/… 无条件部分的子集:***.com/questions/6517423/… 【参考方案1】:这可以通过breakpoint
、condition
和commands
命令的组合来完成。
-
用
breakpoint func
设置断点
通过condition t == 0
使其有条件
使断点打印局部变量:
.
commands
info locals
end
或特定变量:
commands
print t
print z
print x
end
【讨论】:
【参考方案2】:在x=z+1
行下断点,使用'command [breakpoint number]
打印变量并继续。
这行得通,因为您在代码中有分支。
如果没有 if-else 分支。 你也可以使用'break if condition'并执行命令。
【讨论】:
+1,使用display
expr 会更容易,因为它会在每次断点时自动打印 expr 的值已到达。【参考方案3】:
您实际上可以在特定条件下在特定位置休息。
例如如果 x + y -foo(z) == 4,则中断 sourcefile.c:123。如果该表达式的计算结果为真,这将在 sourcefile.c 的第 123 行中断。然后你可以打印你想要的任何值(或继续直到下一次满足条件)
【讨论】:
以上是关于如何在gdb中打印特定条件下的变量?的主要内容,如果未能解决你的问题,请参考以下文章