我最近在工作中继承了一个 C# (.NET 4.0) 项目。该项目有 400k+ 行代码,并使用许多大型try/catch 块来捕获任何异常。有时,应用程序会引发 IndexOutOfRangeException,我的老板要求我尝试找到一种简单的方法来发现引发异常的数组的名称。(这么大的 try/catch 块可以包含许多数组。)我知道我可以使用 FirstChanceException 事件来触发在引发 IndexOutOfRangeException 时执行的代码。例如:
class ExceptionTest
{
public static void Main()
{
AppDomain.CurrentDomain.FirstChanceException
+= new EventHandler<FirstChanceExceptionEventArgs>(CurrentDomain_FirstChanceException);
int[] arr = new int[0];
arr[0] = 0;
Console.Read();
}
static void CurrentDomain_FirstChanceException(object sender,
FirstChanceExceptionEventArgs e)
{
if (e.Exception.GetType() == typeof(IndexOutOfRangeException))
{
Console.WriteLine(e.Exception.StackTrace);
}
}
}
不幸的是,我似乎无法以这种方式找到有问题的数组的名称,但是梳理 400k+ 行代码不是一种选择。
我个人不明白这项任务的意义,但我会很感激任何帮助。这甚至可能吗?
编辑:2014 年 8 月 5 日
我应该澄清一下:在 VS 中调试时很容易找到有问题的数组。此任务的重点是发现当我们的客户正在使用程序的发布版本时哪些数组抛出异常。该程序使用一组日志文件,但这些文件仅指示引发的异常类型 - 而不是数组名称或行号。