Как пропустить несколько итераций цикла в 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();
}