Прервать отладчик при ошибке утверждения

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


person Bogi    schedule 28.01.2011    source источник


Ответы (4)


Глупый я, решение было простым. Когда окно выскочит, нажмите паузу в отладчике :)

person Bogi    schedule 28.01.2011
comment
Интересно, есть ли способ сделать это автоматически. - person Superbest; 30.01.2012
comment
@Superbest - Есть. Смотрите мой ответ. - person Darrel Hoffman; 26.12.2014
comment
При отладке модульного теста с помощью Visual Studio при ошибке Debug.Assert не появляется всплывающее окно, как будто тестовая среда удалила эту функцию. (Я использую VS 2013 Pro.) - person yoyo; 14.04.2016
comment
Что делать, если у вас не подключен отладчик? - person WeSam Abdallah; 06.03.2017

Не уверен насчет VS 2008, но по крайней мере в 2010 и более поздних версиях вы можете перейти к отладке/исключениям (Ctrl-Alt-E). Нажмите кнопку «Добавить», выберите «Исключения общеязыковой среды выполнения» и введите:

Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException

и нажмите «ОК». Теперь он появится в списке, убедитесь, что вы установили флажок в столбце «Выброшено». Теперь вы получите перерыв при любом сбое утверждения.

Обновлено: скриншот из VS 2017 AssertFailedException

person Darrel Hoffman    schedule 26.12.2014
comment
Хороший совет, но что, если я хочу сломать System.Diagnostics.Debug.Assert во время отладки модульного теста? - person yoyo; 14.04.2016
comment
Решение найдено — используйте [TestInitialize], чтобы добавить пользовательский System.Diagnostics.TraceListener, который генерирует исключение UnitTesting.AssertFailedException в случае сбоя Debug.Assert. - person yoyo; 14.04.2016
comment
@yoyo: что, если я хочу сломать System.Diagnostics.Debug.Assert во время отладки модульного теста -- вызов этого метода со значением false для параметра condition, согласно документации, отобразить диалоговое окно с тремя вариантами: «Прервать», «Повторить попытку» и «Игнорировать». Выбор «Повторить» приведет к остановке отладчика (аналогично вызову Debugger.Break()). Нет необходимости задействовать обработку исключений вообще; метод Assert() совершенно не связан с обработкой исключений, а взлом отладчика для Assert() включает совершенно другой механизм. - person Peter Duniho; 08.07.2020

В дополнение к решению Vinay вы можете запустить отладчик для определенного процесса, вызвав

Debugger.Break

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

person vc 74    schedule 28.01.2011

Кажется, что вы можете подключить отладчик, когда утверждение не видит других деталей — см. эту статью: http://blogs.msdn.com/b/davidklinems/archive/2005/08/29/457847.aspx. Это довольно устарело, но, возможно, все еще применимо.

person VinayC    schedule 28.01.2011