C#, Sentry и unhandled exception: как они это делают?
Уважаемые господа,
я начал пробовать использовать централизованный логгинг - через сайт sentry.io.
Практически там просто выбираешь тип проекта, пишешь его название, и система говорит "о, вот этот кусок кода вставь туда то, и будет тебе счастье!"
В моём случае, я экспериментировал с C# и WinForms, сайт предложил мне переписать обычный запуск проекта с
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
на
[STAThread]
static void Main()
{
SentrySdk.Init(o =>
{
// Tells which project in Sentry to send events to:
o.Dsn = "https://[email protected]/63136";
// When configuring for the first time, to see what the SDK is doing:
o.Debug = true;
// Set TracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring.
// We recommend adjusting this value in production.
o.TracesSampleRate = 1.0;
});
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
Потом я поигрался с тем, что в Sentry можно "написать" посредством вызова
SentrySdk.CaptureMessage("Hello Sentry");
и подумал, что во все try-catch нало будет добавлять теперь такую конструкцию.
Но, как выяснилось, Sentry отлично логгирует и unhandled exception! То есть, я сделал "не обтрайкеченную" ошибку, когда insert просто "стукается лбом" о constraint в базе - и эта ошибка, когда приложение упало, прекрасно записалась в Sentry!
И вот тперья сижу и думаю: я не понимаю, как они это делают? Что происходит? Они ведь не создают никакого глобального try-catch, который мог бы перехватывать все "бесхозные" ошибки. А как еще можно перехватить и обработать все исключения в коде?
Спасибо заранее за Ваши подсказки.
в самом конце: как у меня выглядит на их сайте эта ошибка:
