0

我最近在工作中继承了一个 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 中调试时很容易找到有问题的数组。此任务的重点是发现当我们的客户正在使用程序的发布版本时哪些数组抛出异常。该程序使用一组日志文件,但这些文件仅指示引发的异常类型 - 而不是数组名称或行号。

4

2 回答 2

1

使用此代码

try
{
    //large number of arrays in you code like
    int[] arr1;
    int[] arr2;
    //these type of codes and declerations
}
catch(Exception e)
{
    Console.WriteLine(e.Message + "  " + e.StackTrace);
}

现在这个 StackTrace 会告诉你在哪一行,你的代码有错误

于 2014-08-02T15:47:41.443 回答
0

经过大量思考、研究和实验,我发现所描述的内容是不可能的。是的,我可以在行号中获取,但不幸的是,分发的编译应用程序的不同版本太多,代码非常动态,行号将毫无意义。

于 2014-08-14T20:58:56.103 回答