Как установить «Перерыв на все исключения» из пакета

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

Я попробовал несколько подходов, ни один из которых не является удовлетворительным.

Вот что я уже пробовал :(

ExceptionSettings.SetBreakWhenThrownMSDN)

Это очень медленно (см.эта проблема подключения). Я попробовал подходы из вопроса "Переключить «Перерыв, когда выдается исключение. используя макрос или сочетание клавиш " и ни один из них, похоже, не работает надежно: в большинстве случаев устанавливается только флажок верхнего уровня, и он фактически не нарушает исключения при отладке.

ВызовDTE.ExecuteCommand("Debug.Exceptions") показать окно и позвонить (SetWindowsHookExMSDN) прямо перед этим перехватить его до его появления (чтобы у пользователя не было вспышки). Это кажется возможным, так как я смог перехватить сообщение и получитьHWND, Но это кажется хакерским и окно не так легко манипулировать должным образом (оно имеет некоторую странную комбинациюSysListView32 с пользовательскими флажками иSysTreeView32). Так что я оставляю это как последний шанс решения.

Как-то получить (IDebugEngine2MSDN) для управляемого кода и вызова (IDebugEngine2.SetExceptionMSDN) в начале сеанса отладки. Это кажется возможным, но у меня проблемы с получением отладочного движка. Я пытался подойти сIVsLoader описанона форумах MSDN, но я почти уверен, что это дает мне новый экземпляр, не связанный с сеансом отладки.

Я также задал вопрос здесь:Visual Studio: как получить IDebugEngine2 из пакета VS (кроме IVsLoader) ", но не получил решение.

Я пытался использовать (IVsDebugger.AdviseDebugEventCallbackMSDN) и переходя в реализацию (IDebugEventCallback2MSDN), но я всегда получаюnull заpEngine (и нетIDebugEngineCreateEvent2 или).

Я получаюIDebugSessionCreateEvent2 (без документов?) и может получитьIDebugSession2 от этого, но егоSetException звонок всегда дает мнеHRESULT за неправильный аргумент, поэтому я мог бы что-то здесь упустить (вызовSetException на двигатель отIVsLoader дает нормально, просто не работает).

Есть ли какой-то другой подход, который лучше этих или я что-то упустил в существующих?

UPDATE / Примечание:

Если вы нашли этот вопрос, потому что вы хотите быстрее "Перерыв на все исключения "Я сделал бесплатное расширение, которое вы можете получить из Visual Studio Gallery:Исключение

Ответы на вопрос(1)

Ваш ответ на вопрос