这是让你想要找到一条漂亮绳索的问题之一。这个问题比不公布想要借钱的姐夫停止更令人讨厌。
让我先提前表示,我真的很感谢在这个问题上给予的任何帮助。
我有一个C#(2.0)应用程序。这是一个相对简单的应用程序,它根据作为命令行参数传递的XML文件执行存储过程。
我们将其用作调用不同存储过程的工具。此应用程序执行一些日志记录,并且大部分工作得很好。
应用程序从XML文件中读取存储过程名称和参数。它设置了一个连接字符串和SQL Command对象(System.Data.SqlClient.SqlCommand)。
然后它使用ExecuteReader方法运行存储过程。
不幸的是,在少数情况下,此应用程序产生了以下错误:
“Application popup: StoredProcLauncher.exe - Application Error : The instruction
at "0x7c82c912" referenced memory at "0x00000000". The memory could not be "read”
此错误已在多台服务器上出现,因此必须是代码问题。
似乎当我们的生产服务器滚动一定数量时,它会消除此内存错误。
问题是我在开发时没有看到这个问题。我无法复制它,所以我被卡住了。
有没有办法模拟这个错误。我可以以某种方式填写本地PC上的内存以尝试复制此错误吗?
是否有人知道可能导致此类错误的常见编码问题?
有人可以借用一些绳子吗?
答案 0 :(得分:3)
执行此操作的一种方法是将有问题的代码包装在try catch块中,并将堆栈跟踪和错误消息写入Windows应用程序事件日志,文本文件,电子邮件等。
这将为您提供一些行号和其他信息。
另请注意,您可能需要在调试模式下部署它,或者至少使用应用程序exe / dll复制.pdb文件,以便它可以获取调试符号。不记得我的头脑是如何工作的,但我认为当您在发布模式下部署时,您可能会丢失一些有价值的调试信息。
答案 1 :(得分:2)
“0x7c82c912”处的指令引用“0x00000000”
处的存储器
当代码尝试读取或写入尚未分配或无法访问的内存时,非托管或不安全代码中会发生访问冲突。这通常是因为指针具有错误值。
为什么您的程序有非托管/不安全的代码?为了做你所描述的,它不需要本机代码。
唉,代码崩溃了,现在不是想知道如何最终调用本机代码的时候了。要解决此问题,您必须捕获转储并分析转储。见Capturing Application Crash Dumps。有一些专门用于此的工具,如breakpad。还有一些服务可以帮助您收集和跟踪从您的应用生成的崩溃,例如crittercism.com或AirBrake。我甚至为自己创建了一个并公开bugcollect.com。