Как пропустить несколько итераций цикла в GDB?

Предположим, что у меня есть цикл, который будет повторяться 100 раз, и я хочу пропустить 50 итераций, но я хочу продолжать нажимать next оттуда, чтобы увидеть каждую строку.

Я не хочу устанавливать точку останова после цикла, потому что таким образом я пропущу все итерации, а не только число, на которое я намерен.

Есть ли способ сделать это в GDB? Как?

P.S. Я не хочу продолжать нажимать next от начала до конца. Это отнимает много времени...

Ответ 1

Установите точку останова в цикле, а затем вызовите c 50, чтобы продолжить 50 раз

Отладка с помощью GDB

5.2 Продолжение и шагание

continue [ignore-count]
c [ignore-count]
fg [ignore-count]
Резюме выполнение программы по адресу, где ваша программа была остановлена ​​последним; Любые точки останова, установленные на этом адресе, обходят. Дополнительный аргумент ignore-count позволяет указать дополнительное количество раз, чтобы игнорировать точка останова в этом месте; его эффект подобен эффекту игнорирования (см. раздел Условия разрыва). Аргумент ignore-count имеет смысл только когда ваша программа остановлена ​​из-за точки останова. В другие времена, аргумент для продолжения игнорируется.

Ответ 2

Вы можете использовать условные точки останова

break <lineno> if i > 50

где i - индекс цикла

Ответ 3

Вы можете использовать точку останова условия.

синтаксис:

b FileName.extension:lineNumber if varname condition

пример:

b File.c:112 if i == 50

Ответ 4

В С#, например, вы можете "продолжить" пропустить итерацию. Пример пропусков чисел с 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();
    }