как пропустить часть при отладке рекурсивной функции с помощью GDB - PullRequest
2 голосов
/ 21 июня 2011

Вот функция в моей программе

void
quicksort (int *num, int p, int r, int june)
{
  int q, bbc, ccd;
  if (p < r)
    {
      call++;
      q = partition (num, p, r, june);//<--I want to skip this call in gdb session
      bbc = q - 1 - p + 1;//<-- and want to continue execution step by step from here
      quicksort (num, p, q - 1, bbc);
           ccd=r-q+1;
      quicksort (num, q + 1, r, ccd);
    }
} //since it is a recursive function each time quicksort is called partition is also executed I want to focus my debugging only to quicksort

Если вы заметили, что он вызывает другой раздел функции между ними. Во время работы в сеансе GDB Я хочу пропустить GDB, показывающий мне шаги раздела, т.е. я знаю, что раздел функции корректен, поэтому сделайте то, что делает раздел, а затем перейдите к следующей инструкции

     bbc = q - 1 - p + 1;

и в моем сеансе отладки не показывать информацию о разделе. Так как я могу пропустить эту часть и продолжить отладку быстрой сортировки.

Ответы [ 3 ]

3 голосов
/ 21 июня 2011

Я думаю, вы ищете шаг за шагом .

Шаг за шагом такой же, как и шаг за шагом, за исключением того, что когда он достигает вызова для другой процедуры, он будетне вступайте в процедуру.Процедура будет запущена, и вы перейдете к следующему утверждению в текущей процедуре.

В GDB это делается с помощью команды next.Когда вы запускаете строку q = partition (num, p, r, june); в gdb, введите next, и она просто выполнит функцию секционирования, не вдаваясь в подробности своего кода.

Подробную информацию о входе в gdb можно найти в этом ссылка .

2 голосов
/ 21 июня 2011
b <line number>

установит точку останова

c

будет продолжаться до следующей точки останова.

1 голос
/ 21 июня 2011

Вы можете установить точку останова для строки после partition:

b <line number>

Затем используйте c для продолжения до точки останова.

Или вы можете использовать n, чтобы пропустить вызов partition (то есть наберите n при достижении вызова partition, и он пропустит тело функции).

Или вы можете набрать finish для выхода из функции partition после ее ввода.

...