我有一个很大的C#代码库。有时候看起来很麻烦,我想知道是否有一种快速的方法可以改善查找和诊断客户端PC上发生的问题。
最紧迫的问题是软件中出现异常,被捕获,甚至报告给我。问题是,当它们被捕获时,异常的原始原因就会丢失。
即。如果在特定方法中捕获到异常,但该方法调用了20个其他方法,并且这些方法每个调用20个其他方法。你得到了图片,无法弄清楚空引用异常,特别是如果它出现在客户端机器上。
我目前发现了一些我认为错误更容易发生的地方,并将它们直接包装在自己的try catch块中。这是唯一的解决方案吗?我可以待在这里很长时间。
我不在乎异常会导致当前进程失效(它只是一个主题 - 而不是主应用程序),但我关心异常会回来并且无法帮助进行故障排除。
有什么想法吗?
我很清楚我可能会问一个听起来很愚蠢的问题,而且可能没有直截了当的答案。所有相同的讨论都会很好。
答案 0 :(得分:3)
异常维护调用堆栈,您可以使用它来跟踪异常的来源,除非异常被错误地重新抛出或被吞下。前者,我的意思是:
try
{
//...
}
catch ( Exception e )
{
//do stuff with exception
throw e;
}
而不是:
try
{
//...
}
catch ( Exception )
{
//do stuff with exception
throw;
}
后者维护调用堆栈,而前者不维护。通常,代码应该只捕获它计划处理的异常而不是所有异常。如果代码以这种方式正确设计,那么当最顶层的层捕获异常时,您应该通过调用堆栈获得启动事件链的方法。