Как вызвать исключение во время сеанса отладки в VS2010 - PullRequest
18 голосов
/ 19 мая 2011

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

Ответы [ 6 ]

32 голосов
/ 28 декабря 2011

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

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

17 голосов
/ 19 мая 2011

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

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

РЕДАКТИРОВАТЬ: с дополнительной условной:

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

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

14 голосов
/ 19 мая 2011

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

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


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

3 голосов
/ 19 мая 2011

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

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

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

2 голосов
/ 19 мая 2011

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

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

У меня есть опыт работы с 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" );
}

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

0 голосов
/ 20 февраля 2014

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

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

...