空引用异常 - 没有可用的源

Posted

技术标签:

【中文标题】空引用异常 - 没有可用的源【英文标题】:Null reference exception - no source available 【发布时间】:2013-09-17 17:02:03 【问题描述】:

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

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

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

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

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

谢谢

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢史蒂夫!我完全忘记了添加 Console..WriteLine!【参考方案2】:

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

您可以找到更多信息here

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

【讨论】:

谢谢 Jan。这真的很有趣 - 试一试。

以上是关于空引用异常 - 没有可用的源的主要内容,如果未能解决你的问题,请参考以下文章

空指针异常

空指针异常

致命异常: main ,尝试在空对象引用上调用虚拟方法 [重复]

C# Vlc.DotNet 库 - 空引用异常

java空指针异常:java.lang.NullPointException

由于没有 Java 代码或资源,如何使用空的 javadoc jar(或空的源 jar)将工件上传到 Maven Central?