Visual Studio 2008, во всяком случае, динамически выдавать ошибку при отладке? - PullRequest
2 голосов
/ 15 апреля 2010

Я отлаживаю некоторый код и хотел бы выдать ошибку, фактически не имея кода для исключения.

Пока я отлаживаю и строка кода внутри функции подсвечивается желтым цветом, есть ли способ динамически выдать общее исключение?

Это сэкономит мне кучу времени во время сеансов отладки.

Спасибо

Ответы [ 3 ]

1 голос
/ 15 апреля 2010

Вы спрашиваете, можете ли вы программно вызвать сбой отладчика, если так, то:

Debugger.Break();

Если вы хотите выдать исключение в этой точке отладки, если вы отключили оптимизированную сборку, вы можете редактировать на месте и вставить оператор throw new Exception(); сразу после него, переместить точку выполнения в эту строку перешагните через эту строку, что приведет к тому, что отладчик перейдет к уловке. Тогда вы можете просто удалить строку, которую вы только что вставили. Невозможно сделать это, не вставив какой-то реальный код для выдачи исключения.

0 голосов
/ 15 апреля 2010

Хорошо, я отвечу на свой вопрос, потому что я действительно думаю, что такого рода функции должны быть включены в .NET IDE будущего.

Представьте себе код отладки и во время пошагового выполнения, и часть кода будет выделена, щелкните правой кнопкой мыши и выберите «выбросить исключение». Выпадающий список предоставляется с предопределенными исключениями или просто с новым общим исключением. Таким образом, вы можете тестировать код гораздо быстрее, без необходимости написания конкретных тестовых случаев.

Я также не верю, что написание тестовых случаев всегда возможно. Например, допустим, я запрашиваю данные из веб-службы. И я хочу поймать следующие исключения: SSL Trust Failure, соединение отказано, ресурс 404 не найден. Я был бы удивлен, если есть способы написания этих тестовых случаев, когда запрашиваемая вами служба не является вашей собственной. В этих случаях представьте, насколько было бы лучше, если бы вы могли просто вмешаться, и в нужном месте щелкните правой кнопкой мыши, выберите «выбросить новое исключение», а затем в диалоговом окне выберите точный тип исключения, которое вы хотите. , В этом случае вы запускаете код один раз в режиме отладки, каждый раз, когда вы хотите проверить новый тип исключения, просто выполняя правую кнопку мыши. Не нужно останавливать / запускать отладчик или иметь какие-либо временные исключения броска, закодированные повсеместно, которые в конечном итоге должны будут появиться для производственного выпуска.

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


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

Чтобы проиллюстрировать мою точку зрения

  1. Создать Dir
  2. Создать файл в директории

Если вы не запустите строку 1, перетаскивая отладчик в строку 2, то строка 2 теперь сгенерирует исключение, потому что теперь каталог не существует, что было бы, если бы код выполнялся нормально.

Lol - если бы я работал в команде VS, вы все были бы намного счастливее разработчиков.

0 голосов
/ 15 апреля 2010

Я бы посоветовал собрать тестовый набор, который, благодаря входным данным, гарантирует, что программа выдаст исключение в той точке, на которую вы смотрите.

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

Альтернативой является предоставление какого-либо фиктивного объекта, который вызывается в соответствующей строке кода, единственная задача которого - генерировать исключение, которое вам требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...