как создать более точную точку останова или попробовать / поймать - PullRequest
1 голос
/ 27 апреля 2010

У меня есть два цикла FOR, которые внешние повторят 64 раза где-то, где я знаю, есть индекс из-за ошибки Как я могу установить хорошую точку останова или блок try / catch и т. Д., Который точно показывает мне индекс и строку кода, которая вызывает проблему. (C # WinApp)

Спасибо всем.

Ответы [ 3 ]

7 голосов
/ 27 апреля 2010

В отладчике VS вы можете просто включить «Break On Throw Exception» в диалоге Exceptions. Тогда вам не нужно устанавливать точку останова, отладчик автоматически остановится, когда возникнет исключение .

Вы вносите это изменение в: Отладка >> Исключения >> Исключения общего времени выполнения

Просто отметьте соответствующее исключение в столбце «Брошенный» в диалоговом окне:

альтернативный текст http://img248.imageshack.us/img248/5733/breakg.png

Если вам нужно разбить до того, как возникнет исключение (скажем, для проверки некоторых изменчивых данных), можно установить условные точки останова на определенной строке, которая прерывается, только если какое-то условие в вашем коде истинно , Для этого вы можете установить обычную точку останова, а затем щелкнуть правой кнопкой мыши значок красного круга на полях и выбрать: [Условие ...].

Это вызывает диалоговое окно условная точка останова , в котором вы можете написать выражение, которое приведет к разрыву отладчика при оценке в true (или при изменении какого-либо значения). Условия точки останова могут быть немного сложными, но если вы придерживаетесь простых переменных в вашем коде, это работает хорошо.

альтернативный текст http://img293.imageshack.us/img293/2921/break.png

2 голосов
/ 27 апреля 2010

[ Я думаю, что другие ответы лучше для этой конкретной проблемы, но я оставляю это из-за ограниченных возможностей. ]

Для быстрой отладки зайдите в цикл, чтобы ваша переменная цикла все еще находилась в области видимости и заполнялась.

int[] array = new int[10];

for (int i = 0; i < 20; i++)
{
    try
    {
        int temp = array[i];
    }
    catch (IndexOutOfRangeException ex)
    {
        // i is still in scope
    }
}
2 голосов
/ 27 апреля 2010

Если вы используете Visual Studio, самый простой способ - просто нажать F5. Отладчик автоматически прекратит работу при возникновении исключений, генерируемых вашим кодом, который не перехватывается.

Это не обязательно будет работать, если исключение обнаруживается в другом месте вашего кода. Если это так, вы можете включить прерывание для исключений, перейдя на

  • Отладка -> Исключения
  • Проверьте, «выброшен пользователем» для исключения CLR
  • Хит F5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...