有没有办法在我的C#应用​​程序中复制内存无法读取的错误消息?

问题描述:

这是使你想找到一条好绳子的问题之一。这个问题比通过不公布想要借钱的小姨子更加恼人。有没有办法在我的C#应用​​程序中复制内存无法读取的错误消息?

让我先声明,我真的很感谢在这个问题上的任何帮助。

我有一个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

例如,您可以将堆栈跟踪写入Windows应用程序事件日志(或文本文件或电子邮件等),以便下次发生在服务器上时,可以查看堆栈跟踪并获取一些行号。 – 2013-03-15 18:16:04

+0

非常感谢您的帮助。请发布一个答案,以便我可以给你一些* Love。 – codingguy3000 2013-03-15 18:17:07

一种方式是包装有问题的代码在一个try catch块,写的堆栈跟踪和错误信息到Windows应用程序事件日志,文本文件,电子邮件等

这会给你一些行号和附加信息。

另外请注意,您可能需要在调试模式下部署该或至少.pdb文件与应用程序EXE/DLL复制,使它能够调试符号。无法记住我的头脑是如何工作的,但我认为当您在发布模式下部署时,可能会失去一些有价值的调试信息。

+0

非常有用的信息。谢谢。 – codingguy3000 2013-03-15 18:22:45

The instruction at "0x7c82c912" referenced memory at "0x00000000"

这是一个access violation

An access violation occurs in unmanaged or unsafe code when the code attempts to read or write to memory that has not been allocated, or to which it does not have access. This usually occurs because a pointer has a bad value.

为什么你的程序有非托管/不安全的代码?为了做你所描述的,它不需要本地代码。

唉,代码崩溃,现在不是时候想知道如何结束调用本机代码。为了解决你将不得不搭上转储和分析转储的问题。见Capturing Application Crash Dumps。有迹象表明,专注于这一点,像breakpad工具。还有一些服务可以帮助您收集和跟踪从您的应用中产生的崩溃,如crittercism.comAirBrake。我甚至为自己创造了一个并且公开了它bugcollect.com

+0

更多伟大的信息非常感谢你。 – codingguy3000 2013-03-15 18:32:52

+0

存储过程可能是非托管/不安全的代码吗? – codingguy3000 2013-03-15 18:33:21

+0

否。错误发生在您的应用程序中,而不是服务器上。 – 2013-03-15 19:13:29