如何使用gdb在for循环中使用计数器的特定值?

时间:2012-11-04 16:01:48

标签: c gdb

我有一个大约100个奇数值的for循环。我想有一个断点,我可以为iterator变量设置一些值,然后直接继续执行该程序执行状态。

例如

for(int i=0;i<500;i++)
{ 
  doSomething();
}

这里我希望在i=100;上有一个断点,并一步一步地遍历0到99之间的所有值。这可能在gdb中,我该怎么做?

3 个答案:

答案 0 :(得分:8)

gdb中,您可以设置断点的条件。

break line if i == 100

“line”是适当的行号。

答案 1 :(得分:1)

可能有更好的方法,但我做了很多这样的事情:

if (i == 100) {
    int breakpoint = 10;
}

答案 2 :(得分:1)

条件断点是仅在某个条件为真时才将控制转移到gdb的断点。

如果在循环的10次迭代之后只需要gdb控制,这将非常有用。

要在断点上设置condition,请使用condition命令,其中包含断点编号,后跟触发断点的条件。

以下是设置条件断点的示例,该条件断点仅在“条件(i> = 10)为真时触发”:

(gdb) break 28                                  # set breakpoint at line 28
(gdb) info break                                # list breakpoint information
  Num Type           Disp Enb Address    What
   1   breakpoint     keep y   0x080588a3 in loopit at loops.c:28

(gdb) condition 1 (i >= 10)                # set condition on breakpoint 1
(gdb) run   (or write `continue` if already running)