如何在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】:

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

    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中打印特定条件下的变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何 gdb 如何打印一个地址中的内容

在 GDB 中打印多个变量?

Python 中如何打印变量值

如何在 gdb 中禁用程序集标签打印

如何使用 REGEXP_REPLACE 替换特定条件下的重复单词?

使用gdb时,如何在Pascal中打印数组中的一部分值