На чтение 4 мин. Опубликовано 15.12.2019
Ошибка возникает в игре Minecraft.
Это значит, что приложение (в данном случае Minecraft) «словило» исключение. Исключение, в данном случае, это непредвиденная ошибка или непредвиденное поведение одного или нескольких программных компонент. Скорее всего, это может быть связанно с устаревшей версией JVM (Java Virtual Machine) или JRE (Java Runtime Environment). Как вариант, переустновить (или обновить) JVM и JRE до актуальной версии. Сделать это можно здесь.
Если это не помогло — то может быть, есть вариант, скачать новый дистрибутив Minecraft (новую сборку), т.к. текущая сборка оказалась по тем или иным причинам несовместима с текущей версией JVM (например, JVM сама обновилась).
Также возможны проблемы с драйверами видеокарты.
Хорошо-бы понять, при каких действиях пользователя, приложение «ловит» исключение, и что за исключение она ловит (скриншот например).
While validating my changes to the sandbox with Force.com Migration Tool, I suddenly got the below error.
Component Failures: 1. objects/PersonAccount.object — Error: An unknown exception has occurred.
The problem is, I have no clue about why is this happening.
To debug, I revert all of my changes back to a previous successful deployment version and tried to deploy again, but still I get the same error.
Could someone please help me with this as I have no clue why is this happening suddenly?
При запуске различных программ пользователь может встретиться с сообщением «Unhandled exception has occurred in your application», после чего программа обычно просит нажать на кнопку «Continue» для продолжения работы. При этом после нажатия на данную кнопку приложение обычно бывает закрыто. Данный материал призван помочь пользователю исправить эту ошибку, я расскажу, что это за проблема, и как исправить Unhandled exception has occurred на вашем ПК.
Ошибка Unhandled exception has occurred при запуске игры PES
Содержание
- Суть проблемы Unhandled exception has occurred
- Что делать с Unhandled exception
- Заключение
Суть проблемы Unhandled exception has occurred
В переводе с английского сообщение «Unhandled exception has occurred in your application» полностью звучит как «В вашем приложении произошло необработанное исключение. Если вы нажмёте на «Continue», то приложение проигнорирует эту ошибку и попытается продолжить работу. Если вы нажмёте на «Quit», приложение будет немедленно закрыто».
Появление такого сообщения имеет широкую вариативность причин, связанную с повреждением файлов, обслуживающих работу приложения, а также с проблемами в их отлаженном функционале. Ошибку с сообщением Unhandled exception has occurred можно встретить как при запуске множества игр, так и при работе различных служебных приложений и других специализированных программ.
Скриншот проблемы
Что делать с Unhandled exception
Чтобы исправить данную дисфункцию нужно сделать следующее:
- Перезагрузите ваш компьютер, иногда это помогает;
- Запускайте проблемное приложение с правами администратора, в некоторых случаях это оказалось эффективным;
- Проверьте вашу систему на наличие вирусов, иногда причиной возникновения данной дисфункции является повреждение зловредами тела программы. Используйте проверенные антивирусные программы уровня Dr.Web CureIt!, Trojan Remover и другие;
- Проведите восстановление программы NET Framework (зайдите в список установленных программ, найдите NET Framework, и, кликнув на неё дважды выберите «Repair»). После проведения процедуры восстановления попробуйте вновь запустить требуемое приложение;
- Переустановите приложение Visual C++, проблемы в его работе также могут вызывать описываемую мной проблему
- Переустановите с нуля проблемное приложение, а также попробуйте другой взлом к нему (при пиратской версии);
- Загрузите ваш компьютер в безопасном режиме (safe mode) и попробуйте запустить приложение. Несмотря на то, что в данном режиме функционал системы существенно ограничен, для некоторых проблемных приложений это может быть хорошим лакмусом в выявлении корня проблемы. Если приложение запустилось, убедитесь в свежести драйверов для компонентов вашего ПК, а также проверьте, нет ли конфликтов между компонентами системы в диспетчере устройств;
- Если в безопасном режиме ошибка «Unhandled exception has occurred in your application» повторяется, тогда выполните чистую загрузку (clean boot) системы.
Как исправить ошибку в зависимости от вашей операционной системы описано здесь.
Заключение
Описываемая выше ошибка Unhandled exception has occurred имеет широкую вариативность причин своего возникновения. Очень часто в этом виноваты вирусные программы, а иногда программа плохо функционирует из-за некорректно произведённого взлома. Попробуйте весь список предложенных мной советов, один из них обязательно окажется для вас наиболее действенным и эффективным.
С ошибкой, для которой в описании указана ссылка на исключение unknown software exception, в основном сталкиваются пользователи Windows седьмой модификации и версии XP, а сам сбой обычно появляется на стадии установки определенных программ или при запуске уже инсталлированных приложений по прошествии некоторого времени. К сожалению, операционная система никаких подробных расшифровок этой неполадки не дает, а предлагает просто закрыть проблемный апплет, что у большинства пользователей вызывает, мягко говоря, недоумение. Как бороться с такими ситуациями, выясним далее.
Что за ошибка с исключением unknown software exception (0xc000001d) и причины ее появления в Windows
По природе своей сбой особо критичным не является и на работоспособность самой операционной системы не влияет. Но вот с пользовательскими программами могут начаться достаточно серьезные проблемы. В большинстве случаев появление сбоя с исключением unknown software exception связывают с тем, что устаревшее оборудование не поддерживает установку обновлений программ или новых приложений, которые не рассчитаны на имеющуюся аппаратную конфигурацию.
В первую очередь это касается процессора, который не может обработать новые инструкции и директивы, поскольку попросту их «не знает». Замечено, что описываемые неполадки чаще всего возникают с мультимедийными программами, играми или приложениями вроде Skype, которые в своей работе активно используют всевозможные дополнительные платформы и компоненты (.NET Framework, Adobe Flash и т. д.).
Но главными причинами сбоя с непонятным исключением unknown software exception обычно называют следующие:
- несоответствие новых версий ПО конфигурации компьютера;
- сбойные или неправильно установленные апдейты самих ОС;
- устаревшие драйверы;
- отсутствие дополнительных платформ или их обновлений;
- воздействие вирусных апплетов.
Исходя из примерного списка первопричин, будем искать оптимальное решение по устранению проблемы для каждого конкретного случая. Но сразу стоит заметить, что выяснить первопричину с ходу обычно бывает невозможно, поэтому может понадобиться выполнение всего комплекса предлагаемых мер. Ошибки данного характера могут проявляться не только в вышеуказанных версиях Windows, но и предлагаемые ниже методы их исправления могут быть использованы в любой из известных ОС всего семейства.
Исправление сбоя при невозможности установки приложений
При попытке установки программ причина выглядит достаточно простой и даже банальной. Если вы собираетесь инсталлировать более свежую версию имеющего приложения или выполнить установку новой модификации с нуля, суть сбоя с исключением unknown software exception 0x000001d сводится к проблеме совместимости. В этой ситуации можете попробовать установить версию ПО в виде более ранней редакции.
Также не помешает запустить и сам файл установщика в режиме совместимости, выбрав в списке (если есть) ОС более низкого ранга.
Примечание: для установленной программы в Windows последних модификаций сразу можно выставить запуск в режиме совместимости через свойства ярлыка исполняемого файла.
Если же какая-то программа обновилась самостоятельно, но с вашего согласия (например, тот же «Скайп»), не спешите ее удалять.
Для начала попробуйте установить апдейты для платформы .NET Framework и расширения Flash Player от Adobe. В случае с играми не помешает проверить и наличие обновлений DirectX. Если это не поможет, а ошибка с исключением unknown software exception будет выдаваться снова и снова, удалите проблемное приложение и установите вместо него более раннюю модификацию. Несколько неудобно, но ничего не поделаешь. Затем в настройках, если есть такая возможность, полностью отключите автоматический поиск и установку обновлений для самого приложения.
Откат системы и действия с обновлениями системы
Если же виной появления описываемого сбоя являются обновления самой Windows, что раньше особо часто замечалось за «семеркой», а с некоторых пор этим начала грешить и «десятка», удалите последние установленные пакеты, воспользовавшись разделом программ и компонентов, где нужно перейти по ссылке просмотра инсталлированных апдейтов.
Оптимальным же вариантом станет использование специального деинсталлирующего ПО наподобие iObit Uninstaller, которое автоматически подчищает остатки после удаления основных компонентов.
Если это результата не дает, попробуйте откатить систему стандартным методом, выбрав точку восстановления, которая по времени предшествовала моменту появления ошибок.
Состояние драйверов
Конфликты на уровне аппаратной части нередко связывают и с устареванием драйверов. В этом случае настоятельно рекомендуется их обновить, а основной упор сделать на оборудование, которое задействуется в проблемной программе (видеокарты, звуковые платы и т. д.).
Заниматься поиском и установкой обновлений через «Диспетчер устройств» – дело абсолютно неблагодарное. Все равно Windows обычно ничего путного не находит. Намного проще воспользоваться автоматизированными приложениями и наборами вроде Driver Booster или DriverPack Solution и выполнить обновление драйверов для всех устройств. Для поиска и инсталляции потребуется бесперебойное подключение к интернету.
Примечание: если ошибка возникает именно после обновления драйвера, в «Диспетчере устройств» выполните откат.
Частный случай появления и исправления ошибки
В качестве примера устранения описываемого сбоя можно привести известную игру Apex Legends (исключение unknown software exception сигнализирует либо о том, что видеокарта не распознана, либо свидетельствует о выставлении не поддерживаемых параметров графики, либо сообщает о наличии устаревшего процессора). Для начала, как уже было сказано выше, обновите драйвер графического адаптера.
Если эффект оказывается нулевым, устранить сбой с исключением unknown software exception в Apex можно за счет установки параметров графики, показанных на изображении ниже.
Примечание: в некоторых случаях бывает необходимо обновить компонент Visual C++, скачав его с официального сайта Microsoft.
Что же касается процессора, никаких вариантов, кроме его замены, нет!
Использование оптимизаторов и проверка на вирусы
Наконец, нелишним будет проверить систему на вирусы, а также попытаться оптимизировать реестр. В первом случае предпочтение следует отдать портативным антивирусным сканерам, во втором – специальным оптимизаторами вроде Advanced SystemCare, CCleaner и им подобным. Вполне возможно, что удаление устаревших или неправильных ключей, ссылающихся на отсутствующие объекты, и позволит в полной мере избавиться от появления ошибок с указанием всевозможных исключений (и не только 0x000001d).
While validating my changes to the sandbox with Force.com Migration Tool, I suddenly got the below error.
Component Failures:
1. objects/PersonAccount.object — Error: An unknown exception has occurred.
The problem is, I have no clue about why is this happening.
To debug, I revert all of my changes back to a previous successful deployment version and tried to deploy again, but still I get the same error.
Could someone please help me with this as I have no clue why is this happening suddenly?
Is there a way to debug this?
asked Jan 11, 2016 at 2:37
3
After comparing the sandbox instance with production code base we found this issue is due to spring16(beta) release, there is something to do with the history tracking. We had history tracking enabled for the Account object though we haven’t had it enabled for PersonAccount (this is not required in version 35)
As a solution I added <enableHistory>true</enableHistory>
line to personAccount metadata file and it works!
answered Jan 11, 2016 at 5:54
HasanthaHasantha
2,0052 gold badges22 silver badges44 bronze badges
0
Время прочтения
5 мин
Просмотры 5.4K
Чтобы сделать обработку исключений простой и последовательной, старайтесь не бросать исключения в тех случаях, когда вы можете определить ошибку самостоятельно. Я рекомендую возвращать подходящую ошибку, как в коде ниже.
[HttpGet("{id:int}")]
public async Task<ActionResult<Order>> Get(int id, CancellationToken cancellationToken)
{
var order = await _ordersService.Get(id, cancellationToken);
if (order == null)
{
return NotFound();
}
return Ok(order);
}
Не используйте ошибки для управления потоком приложения. Использование исключений снижает производительность, негативно влияет на читабельность кода, прерывает поток и требует дополнительных действий по корректной обработке исключений.
Также избегайте такого состояния API, когда бросить исключение и отправить ошибку 500 — это единственный способ ответить на запрос. Такие ситуации должны стать поводом для рефакторинга дизайна вашего API и use cases. Отправляйте ошибку 500 только в исключительных необработанных случаях, таких как проблемы с базой данных, системные ошибки и т. п.
Существует несколько способов добавить обработку исключений в ASP.NET Core. Это Exception Filters, Exception handler lambda и Middleware. Я рекомендую последний. Middleware отлавливает ошибки из конструкторов контроллеров, фильтров и обработчиков, ошибки маршрутизации и т. п.
Реализуйте интерфейс IMiddleware и зарегистрируйте этот класс в Startup.cs, как в коде ниже. Обработчик ошибок должен быть первым в конвейере, чтобы ловить любые исключения при обработке запроса.
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Middlewares
services.AddTransient<ErrorHandlerMiddleware>();
services.AddTransient<YourCustomMiddleware>();
services.AddControllers();
}
public void Configure(IApplicationBuilder app)
{
app.UseMiddleware<ErrorHandlerMiddleware>(); // Should be always in the first place
app.UseRouting();
app.UseCors();
app.UseAuthentication();
app.UseAuthorization();
app.UseMiddleware<YourCustomMiddleware>();
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
}
}
Если исключение не обработано, клиенты API получат Unknown Error. Простейший обработчик ошибок должен поймать исключение, залогировать его и отправить статус Internal Server Error. Код ниже добавляет C#-класс, который делает все перечисленное.
public class ErrorHandlerMiddleware : IMiddleware
{
private readonly ILogger<ErrorHandlerMiddleware> _logger;
public ErrorHandlerMiddleware(ILogger<ErrorHandlerMiddleware> logger)
{
_logger = logger;
}
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
try
{
await next(context);
}
catch (Exception exception)
{
const string message = "An unhandled exception has occurred while executing the request.";
_logger.LogError(exception, message);
context.Response.Clear();
context.Response.StatusCode = StatusCodes.Status500InternalServerError;
}
}
}
Я уверен, что нет необходимости проверять свойство context.Response.HasStarted. Его достаточно хорошо обрабатывает сам .NET, бросая InvalidOperationException с подробным сообщением. Как это выглядит в консоли в нашем случае:
Достаточно ли этого? У меня в проектах обычно немного больше требований к обработке ошибок. Вот они:
-
Логируйте больше деталей об исключении. Не добавляйте эти сведения в сообщение исключения. (О том, как использовать свойство Exception.Data, чтобы логировать дополнительные сведения об исключениях, вы можете прочитать в моей предыдущей статье.)
-
Не отправляйте секретную внутреннюю информацию клиентам Web API, такую как stack trace, exception data и т. п.
-
Не обрабатывайте TaskCanceledException как внутреннюю ошибку сервера, когда причина исключения в отмене запроса клиентом, так что наиболее подходящий HTTP-ответ в этом случае — это 499.
-
Используйте JSON как наиболее подходящий веб-формат для обработки ошибок на стороне клиента.
-
Текст ошибок переводится на другие языки, поэтому лучше не показывать пользователю сообщение исключения. Это должно быть что-то, что можно легко перевести, например: «Ой! Что-то пошло не так». Также в сообщении должен быть какой-нибудь уникальный код, с которым пользователь может обратиться в службу поддержки вашего приложения.
-
Используйте систему мониторинга для хранения, анализа логов, поиска и агрегирования проблем по данным об ошибках, включая код ошибки. Это создаст возможности для дальнейшей автоматизации поддержки вашего приложения.
Ниже пример более сложного обработчика ошибок, который соответствует этим требованиям.
public class ErrorHandlerMiddleware : IMiddleware
{
private static readonly JsonSerializerOptions SerializerOptions = new()
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase) },
WriteIndented = true
};
private readonly IWebHostEnvironment _env;
private readonly ILogger<ErrorHandlerMiddleware> _logger;
public ErrorHandlerMiddleware(IWebHostEnvironment env, ILogger<ErrorHandlerMiddleware> logger)
{
_env = env;
_logger = logger;
}
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
try
{
await next(context);
}
catch (Exception exception) when (context.RequestAborted.IsCancellationRequested)
{
const string message = "Request was cancelled";
_logger.LogInformation(message);
_logger.LogDebug(exception, message);
context.Response.Clear();
context.Response.StatusCode = 499; //Client Closed Request
}
catch (Exception exception)
{
exception.AddErrorCode();
const string message = "An unhandled exception has occurred while executing the request.";
_logger.LogError(exception, exception is YourAppException ? exception.Message : message);
const string contentType = "application/json";
context.Response.Clear();
context.Response.StatusCode = StatusCodes.Status500InternalServerError;
context.Response.ContentType = contentType;
var json = ToJson(exception);
await context.Response.WriteAsync(json);
}
}
private string ToJson(in Exception exception)
{
var message = exception.Message;
var code = exception.GetErrorCode();
if (!_env.IsDevelopmentOrQA())
{
return JsonSerializer.Serialize(new { message, code }, SerializerOptions);
}
try
{
var info = exception.ToString();
var data = exception.Data;
var error = new { message, code, info, data };
return JsonSerializer.Serialize(error, SerializerOptions);
}
catch (Exception ex)
{
const string mes = "An exception has occurred while serializing error to JSON";
_logger.LogError(ex, mes);
}
return string.Empty;
}
}
Я предлагаю использовать хэш-код исключения как код ошибки, чтобы отправлять пользователям один и тот же код на схожие проблемы. Чтобы создать короткий код, подойдет любой хэш-алгоритм. Я применяю наиболее доступный SHA-1, затем обрезаю результат до длины, достаточной для того, чтобы сохранить уникальность кода ошибки. Расширение для класса Exception, создающее короткий код ошибки, добавляется с помощью кода ниже.
private const string ErrorCodeKey = "errorCode";
public static Exception AddErrorCode(this Exception exception)
{
using var sha1 = SHA1.Create();
var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(exception.ToString()));
var errorCode = string.Concat(hash[..5].Select(b => b.ToString("x")));
exception.Data[ErrorCodeKey] = errorCode;
return exception;
}
public static string GetErrorCode(this Exception exception)
{
return (string)exception.Data[ErrorCodeKey];
}
Простой пример всплывающего окна об ошибке на стороне клиента.
Я надеюсь, этот подход поможет вам в поддержке приложений. Буду благодарен за вопросы и комментарии к статье