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


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

6 18

6 ответов:

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

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


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

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

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

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

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

Правка: с дополнительным условием:

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

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

Можно использовать

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

И изменить бросок на true. Или создайте метод / свойство и вызовите их.

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

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

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

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

Сначала вам нужно настроить тестовый проект в своем решении, добавить библиотеку dll 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" );
}

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

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

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