Модульные тесты WinDbg C#

В чем мой вопрос/проблема? Я пытаюсь использовать WinDBG для подключения к нескольким моим модульным тестам, которые находятся в библиотеке классов (проект модульного тестирования), но я не могу заставить WinDbg перерыв в управляемых исключениях.

Зачем я это делаю? В настоящее время у меня есть тесты, в которых используются прокладки, и я сталкиваюсь с этой проблемой: UnitTestIsolationException: Выдает исключение при выполнении теста Shims в режиме выпуска/отладки

Однако это ТОЛЬКО происходит, когда эти тесты выполняются в тандеме (тот же список воспроизведения в проводнике тестов) с некоторыми другими тестами, которые не используют прокладки. При индивидуальном запуске тесты проходят нормально.

Итак, я решил запустить WinDbg (с моими очень ограниченными знаниями о нем), подключиться к средству запуска тестов и сломать там исключения.

Что я пробовал: Поскольку это DLL, очевидно, что она загружается каким-то исполняемым файлом для запуска кода в тестах (исполнитель тестов). Хотя я изначально просто запускал эти тесты в Visual Studio, у меня возникли проблемы с определением того, к какому процессу подключить WinDbg, поэтому вместо этого я начал использовать vstest.console.exe, чтобы запустить тесты, а затем подключиться к этому процессу. .

Я могу подключиться нормально, и WinDbg останавливает выполнение тестового запуска (ура!).

Теперь я хочу сломаться, как только возникнет исключение CLR (имеется в виду мое исключение UnitTestIsolationException). Погуглив, я нашел для этого команду windbg: sxe clr

Затем я набираю g, и программа снова начинает выполнять мои тесты.

Поведение, которое я наблюдаю: WinDbg никогда не прерывается из-за UnitTestIsolationException — все тесты выполняются до завершения, результаты тестов выводятся на консоль, затем программа завершается:

Passed   [SomePassingTestName]
Passed   [SomePassingTestName]
Failed   [TheFailedTestMethodName]
Error Message:
   Test method [TheFaileTestMethodName] threw exception:
   Microsoft.QualityTools.Testing.Fakes.UnitTestIsolation.UnitTestIsolationExceptio
n: Unexpected error returned by SetDetourProvider in profiler library 'C:\Progra
m Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsof
t\IntelliTrace\14.0.0\Microsoft.IntelliTrace.Profiler.14.0.0.dll'.

person Paul Zaczkowski    schedule 07.01.2016    source источник
comment
Не могли бы вы предоставить SSCCE (минимальный пример)?   -  person Thomas Weller    schedule 07.01.2016
comment
какое управляемое расширение отладки вы используете? сос/псскор/сосекс?   -  person MaLio    schedule 07.01.2016
comment
@MaLio я использую SOS   -  person Paul Zaczkowski    schedule 07.01.2016
comment
@Thomas Томас Я посмотрю, что я могу предоставить, это исходит из кодовой базы среднего размера, использующей DI и тому подобное, поэтому мне нужно попытаться выделить соответствующие части.   -  person Paul Zaczkowski    schedule 07.01.2016
comment
Вы уверены, что vstest.console.exe не запускает новый процесс для запуска фактического теста? Вы можете использовать procmon, чтобы проверить это. Я бы также попробовал procdump от sysinternals для создания дампа при первых исключениях. procdump -e 1 <pid or unique name>   -  person Lieven Keersmaekers    schedule 08.01.2016
comment
Я предпочитаю psscor, но попробуйте !StopOnException -derived -create System.Exception   -  person MaLio    schedule 08.01.2016
comment
@LievenKeersmaekers Отличная идея! Покопался в procmon, определил, что vstest.console.exe на самом деле запускает два подпроцесса: te.processhost.exe и te.processhost.managed.exe. Присоединение к te.processhost.managed.exe, кажется, работает: D   -  person Paul Zaczkowski    schedule 09.01.2016
comment
@MaLio с идеей Ливена и вашим кодом я смог заставить его сломать исключения. К сожалению, на данный момент у меня нет файлов PDB, необходимых для дальнейшего поиска, поэтому я посмотрю, смогу ли я найти их где-нибудь, если нет, мне придется обратиться в Microsoft.   -  person Paul Zaczkowski    schedule 09.01.2016
comment
В двух словах, вы оба действительно помогли мне ответить на вопрос здесь (почему я не нарушаю свои исключения), поэтому, пожалуйста, добавьте ответы, и я отмечу их соответствующим образом. Спасибо!   -  person Paul Zaczkowski    schedule 09.01.2016
comment
@MaLio - я не считаю, что мой вклад относится к тому же классу, что и ваш, поэтому, если вы окажете честь дать ответ, вы получите мой голос.   -  person Lieven Keersmaekers    schedule 09.01.2016
comment
@LievenKeersmaekers спасибо... самый любезный из вас   -  person MaLio    schedule 11.01.2016


Ответы (1)


Я предпочитаю psscor, но попробуйте

!StopOnException -derived -create System.Exception
person MaLio    schedule 11.01.2016
comment
Спасибо! Как указывалось в комментариях к вопросу, вдобавок к этому процесс, который я отлаживал, запускал дочерние процессы, и именно к ним нужно было прикрепить /те/. - person Paul Zaczkowski; 11.01.2016
comment
@PaulZaczkowski: Итак, если .childdbg 1, вам все еще нужен !soe или тогда достаточно sxe clr? - person Thomas Weller; 12.01.2016