Как поймать "Необработанное исключение win32 произошло в AppName [procId]".

используя С#, Visual studio 2013, приложение для Windows Store

Немного длинное объяснение

Создайте небольшое приложение для Windows Store, которое работает с сохраненными данными JSON. После увеличения количества данных я начинаю получать сообщение Unhandled win32 exception occured in AppName [procId]. - см. Рис. Ниже:

enter image description here

Я пытаюсь уменьшить количество сохраненных данных в файле JSON, но после некоторого времени работы во время отладки я получил это сообщение снова. Поэтому ситуация - если у меня много данных, я могу сделать несколько операций (несколько средств 5) в приложении и получил это исключение, если у меня есть минимальный объем данных, я могу работать с приложением немного больше (в среднем 12-17 разных операция). Операционные средства - чтение из файла, сохранение, загрузка страниц и т.д.

Я немного погуляю и нашел несколько возможных причин:

  • Я должен настроить DEP на ПК, выполнив следующие шаги:

    • Щелкните правой кнопкой мыши на "Мой компьютер". Затем выберите "Свойства".
    • Выберите вкладку "Дополнительно".
    • Выберите "Настройки" для "Производительность".
    • Выберите вкладку "Предотвращение выполнения данных".
    • Выберите опцию "Включить DEP для основных программ и служб Windows". Если этот параметр уже выбран, нажмите "ОК", затем снова нажмите "ОК".
    • Перезагрузите компьютер.

Попробуйте - не помогает

  • Проверка и включение вовремя отладки в моей VISUAL STUDIO

enter image description here

Попробуйте - не помогает

  • Проверить, какой тип исключения может быть уловом VS - выбрать все:

enter image description here

Попробуйте - не помогает

Найдено ниже:

Возникло необработанное исключение win32. Отладка с ошибкой "Just-In-Time" завершилась неудачей со следующей ошибкой: у зарегистрированного пользователя не было доступа к отладке сбойного приложения. Это сообщение указывает, что отладка "Just-In-Time" завершилась неудачно, потому что у вас нет надлежащих прав доступа.

Итак, в среднем у вас нет надлежащих прав доступа.

Попробуйте запустить с правами администратора моего приложения:

enter image description here

Попробуйте - не помогает

  • Также читайте много сообщений из здесь.

Нашел этот и поэтому этот MSDN опубликовал полезный. Попробуйте добавить код в мое приложение:

    public MainPage()
    {
        this.InitializeComponent();
        this.navigationHelper = new NavigationHelper(this);
        this.navigationHelper.LoadState += navigationHelper_LoadState;
        this.navigationHelper.SaveState += navigationHelper_SaveState;
        TimeBinding();
        Application.Current.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
    }

    static void MyHandler(object sender, UnhandledExceptionEventArgs args)
    {
        string e = args.Message.ToString();
    }

но ничего не поймали...

Итак, попробуйте - не помогает

Вопросы:

  • Почему я получил это сообщение и какие возможные причины, которые я не описываю, могут быть причиной для исключения, например "Unhandled win32 exception occured in AppName [procId]."?
  • Я правильно понимаю использование UnhandledException? Возможно, я ошибаюсь в этом, и поэтому я не могу уловить требуемое исключение (я просто изучаю .NET)?

Ответы

Ответ 1

Несколько месяцев назад я разработал систему контроля ошибок для этого задания. В этом проекте я использовал эти основные коды, чтобы поймать любые исключения в win32:

System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

// Catch all handled exceptions in managed code, before the runtime searches the Call Stack 
AppDomain.CurrentDomain.FirstChanceException += FirstChanceException;

// Catch all unhandled exceptions in all threads.
AppDomain.CurrentDomain.UnhandledException += UnhandledException;

// Catch all unobserved task exceptions.
TaskScheduler.UnobservedTaskException += UnobservedTaskException;

// Catch all unhandled exceptions.
System.Windows.Forms.Application.ThreadException += ThreadException;

// Catch all WPF unhandled exceptions.
Dispatcher.CurrentDispatcher.UnhandledException += DispatcherUnhandledException;

И методы слушателя:

/// <summary>
/// Used for handling WPF exceptions bound to the UI thread.
/// Handles the <see cref="System.Windows.Threading.DispatcherUnhandledExceptionEventHandler"/> events.
/// </summary>
[HandleProcessCorruptedStateExceptions]
private static DispatcherUnhandledExceptionEventHandler DispatcherUnhandledException
{
    // catch error ...            
}

/// <summary>
/// Used for handling WinForms exceptions bound to the UI thread.
/// Handles the <see cref="System.Threading.ThreadExceptionEventHandler"/> events in <see cref="System.Windows.Forms.Application"/> namespace.
/// </summary>
[HandleProcessCorruptedStateExceptions]
private static ThreadExceptionEventHandler ThreadException
{
    // catch error ...        
}

/// <summary>
/// Used for handling general exceptions bound to the main thread.
/// Handles the <see cref="AppDomain.UnhandledException"/> events in <see cref="System"/> namespace.
/// </summary>
[HandleProcessCorruptedStateExceptions]
private static UnhandledExceptionEventHandler UnhandledException
{
    // catch error ...        
}

/// <summary>
/// Used for handling System.Threading.Tasks bound to a background worker thread.
/// Handles the <see cref="UnobservedTaskException"/> event in <see cref="System.Threading.Tasks"/> namespace.
/// </summary>
[HandleProcessCorruptedStateExceptions]
private static EventHandler<UnobservedTaskExceptionEventArgs> UnobservedTaskException
{
    // catch error ...        
}

/// <summary>
/// This is new to .Net 4 and is extremely useful for ensuring that you ALWAYS log SOMETHING.
/// Whenever any kind of exception is fired in your application, a FirstChangeExcetpion is raised,
/// even if the exception was within a Try/Catch block and safely handled.
/// This is GREAT for logging every wart and boil, but can often result in too much spam, 
/// if your application has a lot of expected/handled exceptions.
/// </summary>
[HandleProcessCorruptedStateExceptions]
private static EventHandler<FirstChanceExceptionEventArgs> FirstChanceException
{
   // catch error ...        
}

Если вы делаете исключение в своих кодах, вы должны быть уверены, что поймаете это по этим событиям, но когда перед выполнением приложения возникло исключение, тогда эти события не возникают, чтобы показывать или делать какие-либо вещи.
Например, вы не добавили все ссылки на сборки в свой проект, а затем это вызвало исключение в время запуска приложения.

И некоторые другие исключения могут иметь innerException, потому что они созданы с помощью thread или task s. Поэтому вы должны проверить все exception.innerException.

Я надеюсь представить вам решение проблемы.