Доброго времени суток. Есть WPF-приложение
+ дампер(MiniDumpWriteDump
). Нужно при возникновении UnhandledException
в приложении создавать minidump
и затем ложить приложение.
App.xaml.cs:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
}
[DllImport("Kernel32", EntryPoint = "GetCurrentThreadId", ExactSpelling = true)]
public static extern Int32 GetCurrentWin32ThreadId();
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
var pointers = Marshal.GetExceptionPointers(); //тут все ок :)
var thread = GetCurrentWin32ThreadId();
handleAppException(e.ExceptionObject as Exception, thread, pointers);
}
private void Current_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
var pointers = Marshal.GetExceptionPointers(); //тут IntPtr.Zero :(
var thread = GetCurrentWin32ThreadId();
handleAppException(e.Exception as Exception, thread, pointers);
}
private void handleAppException(int threadId, IntPtr pointers)
{
System.Threading.Tasks.Task.Factory.StartNew(() =>
{
MiniDump.CreateMiniDump("C:\\Users\\Public\\Documents\\dump.dmp", threadId, pointers);
}).Wait();
}
Если в программе возникает ошибка связанная с другим потоком, например:
Thread t = new Thread(() =>
{
throw new Exception("Thread exception!");
});
t.Start();
то выполняется CurrentDomain_UnhandledException
и Marshal.GetExceptionPointers();
корректно возвращает указатель.
А если ошибка возникает в UI thread-е, например:
throw new Exception("UI thread");
то выполняется Current_DispatcherUnhandledException
и GetExceptionPointers
возвращает IntPtr.Zero
.
Вопрос:
Как мне получить ExceptionPointers
при ошибке в UI
?
Нашел решение:
использовать Current.Dispatcher.UnhandledExceptionFilter
вместо Current.DispatcherUnhandledException
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Использую данный код: http://wwwcleoag
В данный момент идёт ознакомление с MVVM-паттерномКак правильно привязать DataContext к UserControl?