C#变量在一台特定的PC上损坏,但在其他所有PC上都可以正常工作

时间:2013-09-05 13:23:03

标签: c# memory corruption

我在C#中编写了一个编程的工具,其可执行文件在许多用户之间共享。

在某些PC上,我发现 - 特定变量被清除(即List被自己清除);这导致工具抛出异常。

同样的工具在其余PC上的所有条件下都能正常运行。

如果我将这几台PC与其他所有PC进行比较, RAM,操作系统,任务负载等没有区别。 此外,工具及其依赖项以及使用它的步骤也都相同。

我对这种奇怪的行为感到困惑。对我来说其他问题是受影响的PC和他们的用户位于不同的国家。所以我无法手动检查PC参数或可以调试。我依赖于我得到的日志。

你们中间有人遇到过类似的问题吗?

你能不能告诉我2台具有相同配置的PC有何不同?是否存在环境变量,系统参数等依赖性。

此致 萨钦

5 个答案:

答案 0 :(得分:1)

没有人可以使用您提供的有限信息来回答您的查询。但是我可以给你一些建议如何解决这个问题。

  1. 添加调试日志 - 使用参数信息为每个方法添加日志。您的日志越多,您就越容易找到错误。
  2. 添加错误处理程序以通过整个堆栈跟踪通过电子邮件发送异常 - 您是否可以添加此功能,因为这样可以消除手动收集日志的麻烦。此错误处理程序还可以附加整个日志,以便您在电子邮件中获得完整的上下文。
  3. 分析日志以找出哪个功能在哪个参数
  4. 上失败
  5. 从您的程序中删除错误

答案 1 :(得分:1)

这可能是一个线程问题吗?有时,具有不同核心数量的机器对竞争条件的反应不同。

答案 2 :(得分:0)

任何设备都可能受到 randon内存问题存储不一致的影响,而在Windows机器中,臭名昭着的WINDOWS REGISTRY可以容纳许多可能影响程序执行方式的不同值

我建议您运行任何可靠的工具,在正在运行的计算机上执行内存诊断,并将其与无法运行的计算机进行比较

改进工具中的逻辑,检查变量的内容并执行try / catch操作以尝试检测根本原因并记录这些错误以诊断正在发生的事情

答案 3 :(得分:0)

它认为您应该在区域/文化设置中搜索问题。这行“对我来说其他问题是受影响的PC和他们的用户位于不同的国家/地区。”敲响了一个铃声,该变量与double to string和反之亦然。该列表可能会被解析异常中断。

如果您在开始时显示/记录Thread.CurrentThread.CurrentUICulture.NumberFormat.NumberDecimalSeparator该怎么办?

然后你应该用cultureinfo解析。

例如:

CultureInfo usCultureInfo = new CultureInfo("en-US");

double result;

if (!double.TryParse("0.231312", NumberStyles.Float, usCultureInfo, out result))
{
}

另一个问题可能是,安装了正确的.NET版本(完整/客户端配置文件)

答案 4 :(得分:0)

感谢您提出宝贵的建议和提示。

由于CultureInfo不同而发生错误。 此可执行文件还读取XLS文件以获取一些数据。 由于文化信息中的mismtach,XLS读取不成功,反过来又破坏了一些变量。

要解决这个问题,我有两个选择:        1.安装MS office语言包        2.在程序中更改文化信息如下:               CultureInfo =新CultureInfo(“en-US”);

@Mr。 Jeroen van Langen 特别感谢你!

此致 萨钦