gpt4 book ai didi

.net - 如果抛出异常的对象是在事件处理程序中创建的,则全局事件处理程序没有详细信息

转载 作者:行者123 更新时间:2023-12-02 13:01:34 24 4
gpt4 key购买 nike

全局错误处理问题。
想要获取包括引发异常的行的详细信息。
如果抛出错误的类是在 MainWindow 的 ctor 中创建的,那么它会报告异常的类名和行号。
但是引发异常的类是在事件处理程序中创建的,然后零细节 - 甚至不报告引发异常的类的名称。如何从事件处理程序初始化的对象的异常中获取详细信息?

namespace GlobalErrorHandler
{
public partial class App : Application
{
void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
MessageBox.Show("App_DispatcherUnhandledException Error." + e.Exception.Message + " " + e.Exception.InnerException, "Error");
e.Handled = true;
//if (MainWindow != null) MainWindow.Close();
}
public App()
{
this.DispatcherUnhandledException += new DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException);
}
}
}

<Window x:Class="GlobalErrorHandler.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="200" Width="300">
<Grid>
<Button Content="Class1 from Main" Click="Button_Click_Class"
Height="20" Width="100" HorizontalAlignment="Left" VerticalAlignment="Top"/>
</Grid>
</Window>

namespace GlobalErrorHandler
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//Class1 MyClass1 = new Class1(); // this gives line detail
//throw new Exception(); // this gives line detail
}

private void Button_Click_Class(object sender, RoutedEventArgs e)
{
Class1 MyClass1 = new Class1(); // this does NOT give line detail
}
}
}

namespace GlobalErrorHandler
{
class Class1
{
public Class1()
{
throw new Exception();
}
}
}

此示例是一个类和一个按钮事件。
但页面或任何其他事件也存在同样的问题。
即使抛出异常的类是在 Window Loaded 事件中创建的,那么细节也为零。
查看了e.Exception.GetBaseException(),仍然没有任何信息。
令人沮丧的是在 Debug模式下抛出异常,我可以在 Visual Studio 中查看完整的堆栈跟踪,但当它到达 App_DispatcherUnhandledException 时该堆栈跟踪就消失了。

尝试包含 PDB 文件,但没有解决问题。

最佳答案

在Release模式下,许多方法都是内联的,因此调用堆栈包含的方法比Debug模式下要少。这是您的类和方法在异常中消失的地方。

但是,如果您包含所有必需的 PDB 文件,则应保留异常的堆栈跟踪,包括行号信息。因此,请确保当您运行应用程序时,包含 Page 类的程序集的 PDB 文件存在并且可访问。

关于.net - 如果抛出异常的对象是在事件处理程序中创建的,则全局事件处理程序没有详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18553165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com