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

问题描述 投票:0回答:5

假设我有一个将迭代 100 次的循环,我想跳过 50 次迭代,但我想继续按

next
以查看每一行。

我不想在循环后设置断点,因为这样我将跳过所有迭代,而不仅仅是我想要的数字。

GDB 有办法做到这一点吗?怎么办?

附注我不想从头到尾一直按

next
。很费时间...

c debugging loops for-loop gdb
5个回答
25
投票

在循环中设置断点然后调用c 50继续50次

使用GDB调试

5.2 继续和步进

继续[忽略计数]
c [忽略计数]
fg [忽略计数]
恢复 程序执行,在程序最后停止的地址;任何 在该地址设置的断点将被绕过。可选参数 ignore-count 允许您指定进一步忽略的次数 在此位置设置断点;它的效果类似于忽略(参见 部分中断条件)。参数ignore-count是有意义的 仅当您的程序由于断点而停止时。其他时候, 继续的参数被忽略。


12
投票

您可以使用条件断点

break <lineno> if i > 50

其中

i
是循环索引


0
投票

可以使用条件断点。

语法:

b FileName.extension:lineNumber if varname condition

示例:

b File.c:112 if i == 50

0
投票

您可以使用用户自定义命令

touch nnext
vim nnext
define nnext
  set $count = $arg0
  while $count > 0
    next
    set $count = $count - 1
  end
end
gdb> source nnext
gdb> nnext 10

-8
投票

例如,在 C# 中,您可以执行“继续”来跳过迭代。跳过 mod 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();
    }
© www.soinside.com 2019 - 2024. All rights reserved.