我最近在工作中继承了一个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 +代码行并不是一个选择。
我个人并不了解这项任务的重点,但我将不胜感激。这甚至可能吗?
我应该澄清一下:在找到有问题的数组时非常容易 在VS中调试这项任务的重点是发现哪些数组 在使用程序的 release 版本时抛出异常 由我们的客户。该程序使用一组日志文件,但这些文件 仅指出抛出的异常类型 - 而不是数组 姓名或行号。
答案 0 :(得分: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将显示您的代码中存在错误的行号
答案 1 :(得分:0)
我发现了很多想法,研究和实验,所描述的内容是不可能的。是的,我可以在行号中获得,但不幸的是,分布的编译应用程序有很多不同版本,代码非常动态,行号没有意义。