当前位置:  开发笔记 > 编程语言 > 正文

如何在C#中调试非一致的空引用?

如何解决《如何在C#中调试非一致的空引用?》经验,为你挑选了1个好方法。

我有一个Animal基类,我在一些模拟程序中使用.在这种情况下,Animal运行中最多可能有500 秒.每次运行都设置为Animal每个"时间步" 都做一些事情.因此,我只需遍历动物列表,调用DoTimeStep每个动物,直到完成所有时间步骤.

每个Animal类都有自己的记录器类,用于为模拟中的每个"时间步长"写出数据.这样每个Animal都有自己的日志文件.它一直运行良好(3年),直到我们尝试在虚拟机上运行它.然后,出于某种原因,记录器参考将为"时间步长"为空,然后下一次将在那里.真正奇怪的部分是StreamWriter记录器内部似乎永远不会忘记其文件的位置.它只是跳过写出该时间步的行.和错误日志显示NullReferenceExceptionLogger类.

我找不到任何这种行为的模式.该Animal课程没有被销毁和重建.记录器在Animal构造函数中创建并销毁IDispose.关于如何开始调试此问题的任何想法?

编辑:我可以重新创建这只会有3只动物,所以500个打开的文件不应该是它.但感谢您的努力.

编辑:当我捕获Null Exception的错误时,我不确定我应该做什么.我已经抓住了它,但我无法弄清楚如何找出它为什么会发生.抱歉看似钝.顺便说一句,我确实尝试了Thread.Sleep(300)10000次循环,看看是否有某种比赛正在进行,我不知道.它永远不会在循环中变为空.但是3秒钟后,当我骑过其他两只动物并回来时,它不再是空的.



1> JaredPar..:

我会做以下事情.

    安装VS以在调试器下运行程序

    为空引用异常启用第一次机会异常

    调试器 - >异常 - >展开公共语言运行时 - >检查是否抛出System.NullReferenceException

    启动该程序

    等待

如果需要很长时间才能重新开始,我会启动它并回家过夜.它将在早上等你;)

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有