2012-03-25 57 views
5

我在C#4.0(VS2010)中的应用程序上工作,我有一个非常奇怪的情况。我向所有团队报告了一个错误,并且我一直无法重现它,直到其他开发人员告诉我双击可执行文件并按照错误情况而不是从VS2010启动它。Visual Studio启动可执行文件并自行启动它的区别?

经过一番研究,我发现,大多数在这个问题上的意见是关于未初始化的堆内存之类的,但在C++环境。我知道如果一个变量没有初始化,C#会产生一个错误,而不是一个警告,所以这不是问题,很可能。

两个版本是我的机器和用户对相同的,我现在知道了,按F5 (开始调试)不会产生问题,而Ctrl + F5键一样。所以问题不在于两者之间的差异(其他问题已经解决了这个问题),而是:如何将调试器附加到进程影响其行为?!

该代码通过网络创建连接。

回答

7

所以问题是:如何将调试器附加到C#过程影响其行为?!

在各种方式。它会影响JIT优化,垃圾收集,计时(思考竞争条件),明确尝试检测它是否在调试器中运行的任何内容,以及潜在的类型初始化的顺序和时间。

如果你现在可以复制它,我就开始添加日志,看看,带你 - 一旦你制定出了什么问题实际上是,你可能会发现这是显而易见的,为什么调试程序改变的东西。

+0

注意,与在调试器中运行,在我看来,这个错误的最可能的原因上面提到的问题是竞争条件假设代码是没有明确检测,它是在一个调试器中运行。 JIT优化和垃圾收集问题更可能在调试版本中显示为错误,而不是在发布版本中显示。 – dotancohen 2012-03-25 08:51:19

+0

[@JonSkeet,@dotancohen]我试图通过生成有问题的方法的消息框来解决这个问题。在我的第一个试用版中,我从第一行代码中生成了一个消息框。问题再也没有出现!这可能是什么原因?一个消息框怎么能有这样的区别? – OmarOthman 2012-03-28 08:40:08

+0

@OmarOthman:*非常*容易 - 消息框非常*非常有创意,从根本上影响时间等方面。我建议使用侵入性较小的日志记录......理想情况下,只需定期触摸文件系统,以减少对时间等 – 2012-03-28 08:45:47

相关问题