如何在GDB中跳过循环的若干次迭代?

20
假设我有一个循环要迭代100次,我想跳过50个迭代,但我想继续按next键查看每行的输出。我不想在循环后设置断点,因为这样我将跳过所有迭代而不仅是我打算跳过的部分。在GDB中有没有办法做到这一点?如何实现?
注:我不想从头开始多次按next,这样太耗时间了...

使用中断条件。 - yeyo
好的。但在我的情况下,给定的循环位于另一个文件中的帮助函数内。我使用“step”在调用函数的行上访问循环。如何在另一个文件的一行中设置断点条件? - Gabriel
现在我知道了:你只需要这样做:b 文件名:行号,例如:b helper.c:70。谢谢。 - Gabriel
4个回答

25

在循环中设置断点,然后调用c 50以继续执行50次。

使用GDB进行调试

 

5.2 继续和步进

   

continue [ignore-count]
  c [ignore-count]
fg [ignore-count]
恢复程序执行,在程序上次停止的地址处;该地址设置的任何断点都将被忽略。可选参数ignore-count允许你指定要忽略此位置处断点的进一步次数;它的效果类似于ignore(请参阅“断点条件”一节)。只有当你的程序由于断点而停止时,ignore-count参数才有意义。在其他时候,继续命令的参数会被忽略。


12

您可以使用条件断点

break <lineno> if i > 50

其中i是循环索引


0

您可以使用条件断点。

语法:

b FileName.extension:lineNumber if varname condition

例子:

b File.c:112 if i == 50

-8
在C#中,例如你可以使用"continue"来跳过迭代。以模3等于0的数字为例,数字3、9、12、15等将被跳过。
static void Main(string[] args)
    {
        for (int i = 1; i <= 50; i++)
        {
            if (i%3 == 0)
            {
                continue;                    
            }
            Console.WriteLine("{0}", i);
        }
        Console.ReadLine();
    }

2
谢谢您抽出时间写这篇文章,但我的问题是关于GDB(GNU调试器)。 - Gabriel
2
问题是关于使用gdb,而不是如何编写一个跳过50次迭代的循环。 - user3629249

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接