Точка останова в конкретном случае - PullRequest
0 голосов
/ 03 апреля 2011

Недавно я закодировал функцию, которая не работала должным образом. Мне удалось выяснить, что не так, и исправить это окольным путем, но мне было интересно, есть ли более легкий путь. Функция (урезанная) выглядит примерно так:

int func(int param)
{
  if(param == 0) return SOMETHING;
  //...
  for(int i = 0;i < 4;i++) {
    // Point A
    func(param - 1);
  }
  //...
}

Я хотел установить точку останова в точке A, чтобы я мог видеть, что происходит для param = 10 (например) и i = 0, 1, 2, 3, но проблема в том, что функция рекурсивная, поэтому она вызывает себя (в данном случае) param = 9, 8, ... Мне было интересно, есть ли способ установить точку останова только для определенного случая. В этом случае я использовал MS Visual C ++ Express 2008, но если есть способ сделать это с другим компилятором (возможно, g ++ / gdb), то это тоже будет полезно.

Ответы [ 3 ]

4 голосов
/ 03 апреля 2011

В Visual Studio вы можете щелкнуть правой кнопкой мыши точку останова и изменить ее различными способами.
В Condition... вы можете указать свое состояние, например param == 10.Вы даже можете использовать простые функции библиотеки C для сравнения строк strcmp(mystr,"hi") == 0!

2 голосов
/ 03 апреля 2011

Отладчик Visual Studio поддерживает условные точки останова. После того, как вы установили точку останова в редакторе, щелкните ее правой кнопкой мыши и выберите «Условие ...»

0 голосов
/ 03 апреля 2011

В Visual Studio вы можете установить условные точки останова (не уверен в других средах). Если вы хотите сделать это в любой среде C ++, всегда можно выбрать ASSERT.

ASSERT(param != 10);
...