ユーザーがアプリケーションをデバッグし、未処理の例外がスローされた場合に対処する Visual Studio 用のアドインを作成しました。アプリケーション オブジェクトの「Events」プロパティを使用して、イベント「OnExceptionNotHandled」および「OnExceptionThrown」を登録しました。ドキュメントでは、これらのイベントは「OnEnterBreakMode」の前に発生することがわかります。しかし、「ArgumentException」をスローする単純なアプリケーションをデバッグすると、イベントが発生しません。これが私のコードです(短縮):
public class Connect : IDTExtensibility2
{
public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
_debuggerEvents = _applicationObject.Events.DebuggerEvents;
_debuggerEvents.OnExceptionThrown += new _dispDebuggerEvents_OnExceptionThrownEventHandler(_debuggerEvents_OnExceptionThrown);
_debuggerEvents.OnExceptionNotHandled += new _dispDebuggerEvents_OnExceptionNotHandledEventHandler(_debuggerEvents_OnExceptionNotHandled);
}
void _debuggerEvents_OnExceptionNotHandled(string ExceptionType, string Name, int Code, string Description, ref dbgExceptionAction ExceptionAction)
{
m_panOutput.OutputString("NotHandled\n");
}
void _debuggerEvents_OnExceptionThrown(string ExceptionType, string Name, int Code, string Description, ref dbgExceptionAction ExceptionAction)
{
m_panOutput.OutputString("Thrown\n");
}
void _debuggerEvents_OnEnterBreakMode(dbgEventReason Reason, ref dbgExecutionAction ExecutionAction)
{
m_panOutput.OutputString("EnterBreakMode\n");
}
DebuggerEvents _debuggerEvents;
}