我在C#4.0(VS2010)中的应用程序上工作,我有一个非常奇怪的情况。我向所有团队报告了一个错误,并且我一直无法重现它,直到其他开发人员告诉我双击可执行文件并按照错误情况而不是从VS2010启动它。Visual Studio启动可执行文件并自行启动它的区别?
经过一番研究,我发现,大多数在这个问题上的意见是关于未初始化的堆内存之类的,但在C++环境。我知道如果一个变量没有初始化,C#会产生一个错误,而不是一个警告,所以这不是问题,很可能。
两个版本是我的机器和用户对相同的,我现在知道了,按F5 (开始调试)不会产生问题,而Ctrl + F5键一样。所以问题不在于两者之间的差异(其他问题已经解决了这个问题),而是:如何将调试器附加到进程影响其行为?!
该代码通过网络创建连接。
注意,与在调试器中运行,在我看来,这个错误的最可能的原因上面提到的问题是竞争条件假设代码是没有明确检测,它是在一个调试器中运行。 JIT优化和垃圾收集问题更可能在调试版本中显示为错误,而不是在发布版本中显示。 – dotancohen 2012-03-25 08:51:19
[@JonSkeet,@dotancohen]我试图通过生成有问题的方法的消息框来解决这个问题。在我的第一个试用版中,我从第一行代码中生成了一个消息框。问题再也没有出现!这可能是什么原因?一个消息框怎么能有这样的区别? – OmarOthman 2012-03-28 08:40:08
@OmarOthman:*非常*容易 - 消息框非常*非常有创意,从根本上影响时间等方面。我建议使用侵入性较小的日志记录......理想情况下,只需定期触摸文件系统,以减少对时间等 – 2012-03-28 08:45:47