Подтвердить что ты не робот

Как выполнить исключение во время сеанса отладки в VS2010

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

4b9b3361

Ответ 1

К сожалению, Visual Studio по-прежнему не поддерживает выброс исключения из окна Immediate.

Также не поддерживает лямбда-выражения, анонимные типы, инициализаторы коллекции и т.д. Что-то вроде .NET 2.0.


Также вы можете использовать Debug.Assert(false);

Ответ 2

Единственный реально выполнимый способ, который я нашел, чтобы исключать исключения из метода во время отладки, - это вытащить переменную из-под ног процесса выполнения. То есть установить переменную, которая будет использоваться для нулевого значения, будет явно бросать исключение, как только оно будет выполнено. Однако это не позволит вам создавать пользовательские исключения (например, конкретные типы или сообщения).

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

Ответ 3

Вы можете использовать условную компиляцию:

#if DEBUG
    throw new Exception("Test");
#endif

EDIT: с дополнительным условным:

#if DEBUG && ENABLETESTEXCEPTION
    throw new Exception("Test")
#endif

Вы можете создать настраиваемую конфигурацию (похожую на Release/Debug) с указанными выше условными (свойства проекта → Строка → Условные символы компиляции).

Ответ 4

Вы можете использовать

bool toThrow = false;
if(toThrow) 
{
     throw new Exception("Test");
}  

и измените значение на true. Или создайте метод/свойство и вызовите их.

Ответ 5

Вы делаете это, чтобы проверить, что вы обрабатываете исключение при вызове кода?

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

У меня есть опыт работы с Moq (Mock) http://code.google.com/p/moq/

На сайте есть несколько руководств по настройке и запуску, это довольно легко, как только вы начнете.

Сначала вам нужно сначала установить тестовый проект в своем решении, добавить библиотеку Moq, а затем написать тестовый метод, который устанавливает Moq вашего объекта и сообщает ему, чтобы он генерировал исключение.

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

[TestMethod]
[ExpectedException( typeof( InvalidOperationException ) )]
public void YourMethod_ThrowsIOException()
{
    var mock = new Moq<YourClass>();
    mock.Setup( obj => obj.YourMethod( It.IsAny<string>() ) ).Throws<InvalidOperationException>();

    YouClass mockedClass = mock.Object;

    mockedClass.YourMethod( "anything" );
}

Надеюсь, это поможет.

Ответ 6

Если вы читаете этот ответ, Visual Studio 2013 доступен и поддерживает редактирование и продолжение в 64-битных приложениях. Если у вас есть Visual Studio 2013 и вы ищете способ генерировать исключения здесь и там, чтобы увидеть, как работают ваши обработки исключений или страницы ошибок, просто используйте Edit и Continue и введите прямо в свой код.

Нажмите "Отладка" > "Начать отладки". Запустится веб-приложение. Поместите точку останова. Нажмите на свое приложение, пока не достигнет точки останова. Теперь вы можете добавлять заявления о выбросах прямо в свой код! Просто введите throw new Exception("test") или что-нибудь еще, сохраните файл и нажмите "Продолжить" (продвиньте отладчик), и он обработает только что добавленную строку, как если бы вы ее скомпилировали.