0

我正在使用带有 .NET 1.1 (Visual basic) 的 Visual Studio 2003 - 是的,它是一个遗留系统,无法升级。该程序中有一个工作流程需要运行 25 分钟才能完成(基本上是使用活动报告打印支票)。现在突然对于其中一个客户端,进程在 20 分钟或更长时间后失败,抛出空引用异常。我将错误框如下 - 在此处输入图像描述

当我点击休息时,它说在这个位置找不到源

在此处输入图像描述

现在的问题是,这个过程为 100 名员工运行,并调用了 10 次函数,我真的不能一直为每个员工设置断点来调试(它只需要几个小时)来查看它在哪里抛出空错误。我也无法将所有对象包装在 try catch 或 null 检查中(它只是涉及太多的文件和函数来做到这一点)我需要知道它在哪里中断!

我还监控了任务管理器上的内存,看看 aspnet 是否占用了太多内存 - 但它似乎总是低于 120MB。我也试过 GC.Collect() - 但没有帮助。

如果有人可以指导我如何调试此问题,我将不胜感激?

谢谢

4

2 回答 2

2

添加一些老式的 Console.WriteLine("I'am working on Employee nr:" + empNo) 以查明您在哪里得到异常。现在您可以在该值上设置条件断点并启动调试会话。此外,有时,只需查看所涉及的数据库表即可发现问题(某些字段为空)

于 2013-09-17T17:09:54.003 回答
1

尝试在应用程序域级别捕获异常并记录堆栈跟踪以查看它发生的位置。如果异常发生位置的 PDB 可用,则只能显示源。

你可以在这里找到更多信息

编辑(更多信息):它基本上允许您捕获未在一个方法中处理的每个异常。尝试将异常消息及其堆栈跟踪写入日志文件。最好通过 InnerExceptions 递归循环以真正找到错误的根源。找到它后,您可以手动调试它,因为您知道在哪里设置断点。

于 2013-09-17T17:07:47.993 回答