在我的UI应用程序(WPF/C#,使用MVVM设计模式)中,我实现了一个全局异常处理程序,该处理程序捕获所有意外(因此是未知的)异常,并通过一个专用的“崩溃报告”窗口向用户报告应用程序崩溃。
我不想立即用整个堆栈跟踪来轰击用户,我希望有一行文本,或者说“没有修改数据--您处于安全的一边”,或者“数据处理失败了--您的数据可能不一致”(或者类似的内容)。我想这会让用户对故障的程度感到放心。
为此,我的模型需要跟踪“安全部分”和“关键部分”,崩溃报告窗口需要评估该应用程序状态。
我想知道这是否是一个好主意,更重要的是,有什么合适的方法来实现这一点。我正在考虑将一个公共属性添加到Application
类(我的全局异常处理程序已经驻留在该类中),然后将崩溃报告视图模型绑定到它。也许有更好的方法?
你有什么推荐信要我开始吗?
非常感谢您提前!
发布于 2019-10-16 11:36:17
我已经实现了一个全局异常处理程序,它捕获所有意外(因此是未发现的)异常,并通过一个专用的“崩溃报告”窗口向用户报告应用程序崩溃。
好的。略显总比什么都没有好。我将假设您在应用程序中进一步进行“有用”异常处理。
而不是立即用整个堆栈跟踪轰炸用户.
不要向用户显示堆栈跟踪。
堆叠痕迹是巨大的,可怕的,充满屏幕的噪音。
您希望用户对堆栈跟踪做些什么?
就像代码在例外情况下通常不能做任何“有用”的事情一样,用户永远不能用它做任何“有用”的事情,所以不要浪费时间在它上。给他们一个信息,就这样。
当然,您应该将整个异常记录到以后可以从中检索的某个地方,但不要将其全部放在用户面前。
我想有一行文字,或者说“没有数据被修改-你在安全的一方”或者“数据处理被中止-你的数据可能是不一致的”。崩溃报告窗口需要评估此应用程序状态。
应用状态为“死亡”。
或接近它,因为这是不可能的。
您无法从“全局”异常处理程序的平流层高度角度可靠地确定关于应用程序的“状态”的任何内容--所有细节早就被异常的火箭抛到一边了--就像调用堆栈中的上升一样。
简短答覆:
如果某些事情严重到足以“取出”整个应用程序(这是调用全局异常处理程序的唯一一次),那么所有的赌注都取消了;您无法可靠地告诉用户当时发生了什么。
即使您可以编写这样的代码,您也很可能触发最初抛出的相同的OutOfMemoryException,从而掩盖了真正的问题,除了坠机报告窗口本身的问题!
您所能得到的最好结果应该是稍后可以检索的已记录的异常。
https://softwareengineering.stackexchange.com/questions/399751
复制相似问题