fix: log UnobservedTaskException

This commit is contained in:
Gadfly 2024-07-12 11:09:46 +08:00
parent 3c770e2525
commit ce11c08aba
No known key found for this signature in database

View file

@ -45,6 +45,17 @@ namespace SourceGit
[STAThread] [STAThread]
public static void Main(string[] args) public static void Main(string[] args)
{ {
AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
{
LogException(e.ExceptionObject as Exception);
};
TaskScheduler.UnobservedTaskException += (sender, e) =>
{
LogException(e.Exception);
e.SetObserved();
};
try try
{ {
if (TryLaunchedAsRebaseTodoEditor(args, out int exitTodo)) if (TryLaunchedAsRebaseTodoEditor(args, out int exitTodo))
@ -56,25 +67,7 @@ namespace SourceGit
} }
catch (Exception ex) catch (Exception ex)
{ {
var builder = new StringBuilder(); LogException(ex);
builder.Append($"Crash::: {ex.GetType().FullName}: {ex.Message}\n\n");
builder.Append("----------------------------\n");
builder.Append($"Version: {Assembly.GetExecutingAssembly().GetName().Version}\n");
builder.Append($"OS: {Environment.OSVersion.ToString()}\n");
builder.Append($"Framework: {AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName}\n");
builder.Append($"Source: {ex.Source}\n");
builder.Append($"---------------------------\n\n");
builder.Append(ex.StackTrace);
while (ex.InnerException != null)
{
ex = ex.InnerException;
builder.Append($"\n\nInnerException::: {ex.GetType().FullName}: {ex.Message}\n");
builder.Append(ex.StackTrace);
}
var time = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss");
var file = Path.Combine(Native.OS.DataDir, $"crash_{time}.log");
File.WriteAllText(file, builder.ToString());
} }
} }
@ -338,6 +331,31 @@ namespace SourceGit
} }
} }
private static void LogException(Exception ex)
{
if (ex == null) return;
var builder = new StringBuilder();
builder.Append($"Crash::: {ex.GetType().FullName}: {ex.Message}\n\n");
builder.Append("----------------------------\n");
builder.Append($"Version: {Assembly.GetExecutingAssembly().GetName().Version}\n");
builder.Append($"OS: {Environment.OSVersion.ToString()}\n");
builder.Append($"Framework: {AppDomain.CurrentDomain.SetupInformation.TargetFrameworkName}\n");
builder.Append($"Source: {ex.Source}\n");
builder.Append($"---------------------------\n\n");
builder.Append(ex.StackTrace);
while (ex.InnerException != null)
{
ex = ex.InnerException;
builder.Append($"\n\nInnerException::: {ex.GetType().FullName}: {ex.Message}\n");
builder.Append(ex.StackTrace);
}
var time = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss");
var file = Path.Combine(Native.OS.DataDir, $"crash_{time}.log");
File.WriteAllText(file, builder.ToString());
}
private static void ShowSelfUpdateResult(object data) private static void ShowSelfUpdateResult(object data)
{ {
Dispatcher.UIThread.Post(() => Dispatcher.UIThread.Post(() =>