2014-12-09 3 views
5

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

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

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

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

+0

с использованием условий разрыва. – yeyo

+0

ОК. Но в моем случае данный цикл находится внутри вспомогательной функции, которая находится в другом файле. Я получаю доступ к циклу, используя «шаг» в строке, которую вызываю функцию. Как установить условие прерывания в строке другого файла? – Gabriel

+0

Теперь я знаю: вам просто нужно это сделать: b имя_файла: numberOfTheLine, например: b helper.c: 70. Благодарю. – Gabriel

ответ

8

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

Debugging with GDB

5,2 Продолжение и шаговые

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

-3

В 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(); 
    } 
+0

Спасибо за ваше время написания этого, но мой вопрос о GDB (отладчик GNU). – Gabriel

+0

вопрос был о том, как использовать gdb, а не как закодировать цикл, который пропустит 50 итераций – user3629249

5

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

break <lineno> if i > 50 

где i является индекс цикла