Утверждает, что не работает в Visual Studio 2010 в приложении C # WPF - PullRequest
2 голосов
/ 06 декабря 2011

Я не знаю, является ли это параметр, который я включил или выключил, или есть код, который я каким-то образом связываю, который отключает его, но Debug.Assert больше не останавливает выполнение. Все, что я получаю, это трассировка стека в окне вывода, которая выглядит следующим образом:

The thread '<No Name>' (0x155c) has exited with code 0 (0x0).
The thread '<No Name>' (0x24f4) has exited with code 0 (0x0).
---- DEBUG ASSERTION FAILED ----
---- Assert Short Message ----

---- Assert Long Message ----


    at ...
    at CommandBinding.OnExecuted(Object sender, ExecutedRoutedEventArgs e)  
    at CommandManager.ExecuteCommandBinding(Object sender, ExecutedRoutedEventArgs e, CommandBinding commandBinding)  
    at CommandManager.FindCommandBinding(CommandBindingCollection commandBindings, Object sender, RoutedEventArgs e, ICommand command, Boolean execute)  
    at CommandManager.FindCommandBinding(Object sender, RoutedEventArgs e, ICommand command, Boolean execute)  
    at CommandManager.OnExecuted(Object sender, ExecutedRoutedEventArgs e)  
    at RoutedEventArgs.InvokeHandler(Delegate handler, Object target)  
    at EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)  
    at UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)  
    at RoutedCommand.ExecuteImpl(Object parameter, IInputElement target, Boolean userInitiated)  
    at MenuItem.InvokeClickAfterRender(Object arg)  
    at ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)  
    at ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)  
    at Dispatcher.WrappedInvoke(Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)  
    at DispatcherOperation.InvokeImpl()  
    at ExecutionContext.runTryCode(Object userData)  
    at RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)  
    at ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)  
    at ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)  
    at DispatcherOperation.Invoke()  
    at Dispatcher.ProcessQueue()  
    at Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)  
    at HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)  
    at HwndSubclass.DispatcherCallbackOperation(Object o)  
    at ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)  
    at ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)  
    at Dispatcher.WrappedInvoke(Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)  
    at Dispatcher.InvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)  
    at HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)  
    at UnsafeNativeMethods.DispatchMessage(MSG& msg)  
    at Dispatcher.PushFrameImpl(DispatcherFrame frame)  
    at Application.RunInternal(Window window)  
    at Application.Run()  
    at App.Main()
    at AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)  
    at HostProc.RunUsersAssembly()  
    at ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)  
    at ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)  
    at ThreadHelper.ThreadStart()  

Статистика:

  • Visual Studio 2010
  • Приложение WPF
  • C #
  • .Net 4.0

Кто-нибудь знает, почему не появляется сообщение об ошибке «Ошибка подтверждения»?

Ответы [ 2 ]

3 голосов
/ 17 мая 2012

Со страницы MSDN в Debug.Assert

Отображение окна сообщения зависит от наличия DefaultTraceListener. Если DefaultTraceListener отсутствует в коллекции Listeners, окно сообщения не отображается. Элемент DefaultTraceListener может быть удален элементом for для, элементом for for или вызовом метода Clear для свойства Listeners (System.Diagnostics.Trace.Listeners.Clear ()).

Тем не менее, реализация окна сообщения, которое может качать сообщения, когда есть утверждение, всегда беспокоила меня. Я думаю, что .Net имеет тенденцию работать довольно хорошо, но я потерял невосстановимое состояние из-за такого рода вещей в других контекстах. Для моих собственных проектов .Net я использую свой статический класс Assert, который этого не делает. Вместо этого я вызываю Debugger.Break (), когда мои утверждения не выполняются.

, например

internal static class Assert 
{
    [Conditional("DEBUG")]
    public static void IsNotNull<T>(T obj) where T : class
    {
        if (obj == null)
            System.Diagnostics.Debugger.Break();
    }
}
2 голосов
/ 06 декабря 2011

Исключения внутри привязки обрабатываются по-разному. Вы увидите ошибки связывания (исключения) только в окне вывода. Это вариант.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...