1

我有一个大约 100 个奇数值的 for 循环。我想要一个断点,我可以在其中为迭代器变量设置一些值,然后直接进入该程序执行状态。

例如

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

在这里,我想设置一个断点i=100;并一次性遍历从 0 到 99 的所有值。这可能gdb吗?我该怎么做?

4

3 回答 3

7

您可以在gdb断点上设置条件。

break line if i == 100

其中“line”是适当的行号。

于 2012-11-04T16:14:57.273 回答
1

可能有更好的方法,但我从做这样的事情中获得了很多里程:

if (i == 100) {
    int breakpoint = 10;
}
于 2012-11-04T16:07:39.530 回答
1

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

当您在循环 10 次迭代后只想要 gdb 控制时,这可能很有用。

condition在断点上设置 a,请使用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) 
于 2012-11-04T16:18:17.343 回答