Как установить «Перерыв на все исключения» из пакета
Я хочу сделать расширение для быстрого переключения взлома исключений CLR в отладчике.
Я попробовал несколько подходов, ни один из которых не является удовлетворительным.
Вот что я уже пробовал :(
ExceptionSettings.SetBreakWhenThrown
MSDN)
Это очень медленно (см.эта проблема подключения). Я попробовал подходы из вопроса "Переключить «Перерыв, когда выдается исключение. используя макрос или сочетание клавиш " и ни один из них, похоже, не работает надежно: в большинстве случаев устанавливается только флажок верхнего уровня, и он фактически не нарушает исключения при отладке.
ВызовDTE.ExecuteCommand("Debug.Exceptions")
показать окно и позвонить (SetWindowsHookEx
MSDN) прямо перед этим перехватить его до его появления (чтобы у пользователя не было вспышки). Это кажется возможным, так как я смог перехватить сообщение и получитьHWND
, Но это кажется хакерским и окно не так легко манипулировать должным образом (оно имеет некоторую странную комбинациюSysListView32
с пользовательскими флажками иSysTreeView32
). Так что я оставляю это как последний шанс решения.
Как-то получить (IDebugEngine2
MSDN) для управляемого кода и вызова (IDebugEngine2.SetException
MSDN) в начале сеанса отладки. Это кажется возможным, но у меня проблемы с получением отладочного движка. Я пытался подойти сIVsLoader
описанона форумах MSDN, но я почти уверен, что это дает мне новый экземпляр, не связанный с сеансом отладки.
Я также задал вопрос здесь:Visual Studio: как получить IDebugEngine2 из пакета VS (кроме IVsLoader) ", но не получил решение.
Я пытался использовать (IVsDebugger.AdviseDebugEventCallback
MSDN) и переходя в реализацию (IDebugEventCallback2
MSDN), но я всегда получаюnull
заpEngine
(и нетIDebugEngineCreateEvent2
или).
Я получаюIDebugSessionCreateEvent2
(без документов?) и может получитьIDebugSession2
от этого, но егоSetException
звонок всегда дает мнеHRESULT
за неправильный аргумент, поэтому я мог бы что-то здесь упустить (вызовSetException
на двигатель отIVsLoader
дает нормально, просто не работает).
Есть ли какой-то другой подход, который лучше этих или я что-то упустил в существующих?
UPDATE / Примечание:
Если вы нашли этот вопрос, потому что вы хотите быстрее "Перерыв на все исключения "Я сделал бесплатное расширение, которое вы можете получить из Visual Studio Gallery:Исключение