Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VisualStudio启动可执行文件和自己启动它之间的区别?_C#_Visual Studio 2010_Visual Studio Debugging - Fatal编程技术网

C# VisualStudio启动可执行文件和自己启动它之间的区别?

C# VisualStudio启动可执行文件和自己启动它之间的区别?,c#,visual-studio-2010,visual-studio-debugging,C#,Visual Studio 2010,Visual Studio Debugging,我在用C#4.0(VS2010)开发一个应用程序,我遇到了一个非常奇怪的情况。所有团队都向我报告了一个bug,我总是无法复制它,直到其他开发人员告诉我双击可执行文件并遵循bug的场景,而不是从VS2010启动它 经过研究,发现大部分关于这个问题的注释都是关于未初始化堆内存等的,但是在C++上下文中。我知道,如果变量未初始化,C#会产生错误而不是警告,所以这很可能不是问题所在 这两个版本在我的机器和用户上都是相同的,我现在知道按F5(从调试开始)不会产生问题,而按Ctrl+F5会产生问题。因此,问

我在用C#4.0(VS2010)开发一个应用程序,我遇到了一个非常奇怪的情况。所有团队都向我报告了一个bug,我总是无法复制它,直到其他开发人员告诉我双击可执行文件并遵循bug的场景,而不是从VS2010启动它

经过研究,发现大部分关于这个问题的注释都是关于未初始化堆内存等的,但是在C++上下文中。我知道,如果变量未初始化,C#会产生错误而不是警告,所以这很可能不是问题所在

这两个版本在我的机器和用户上都是相同的,我现在知道按F5(从调试开始)不会产生问题,而按Ctrl+F5会产生问题。因此,问题不是两者之间的区别(其他问题已经解决了这一点),而是:将调试器附加到C#进程如何影响其行为

该代码通过网络创建连接

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

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


如果您现在可以复制它,我将开始添加日志记录,看看它会把您引向何方-一旦您确定了问题的实质,您可能会发现调试器改变事情的原因是显而易见的。

请注意,在调试器中运行的上述问题中,在我看来,这个bug最可能的原因是一个竞争条件,假设代码没有显式地检测到它正在调试器中运行。JIT优化和垃圾收集问题更有可能在调试版本中表现为bug,而不是在发布版本中。[@JonSkeet,@dotancohen]我试图通过按照有问题的方法生成消息框来解决这个问题。在我的第一次尝试中,我从第一行代码生成了一个消息框。这个问题再也没有出现过!!这是什么原因造成的??一个消息框怎么能起到如此大的作用@OmarOthman:非常容易-消息框非常具有侵入性,从根本上影响时间等方面来说。我建议使用侵入性较小的日志记录。。。理想情况下,甚至只是周期性地触摸文件系统,以减少对计时的影响等。[@JonSkeet]我用了你的“计时”功能,只是做了一个
线程。Sleep(20)在方法开始时,一切正常。这是我第一次看到“确定性比赛条件”!!我对实际问题一无所知。。。这很糟糕。感谢您的帮助和快速回复。@OmarOthman:所以这可能不仅仅是时间问题,还有
MessageBox.Show
与侵入性较小的日志记录相比仍然做得很多。因此,回到能够重现它的状态,并巧妙地添加日志记录,在问题消失时随时回溯。