我在C#4.0(VS2010)中处理应用程序,我有一个非常奇怪的情况。我向所有团队报告了一个错误,我总是无法重现它,直到其他开发人员告诉我双击可执行文件并按照错误的方案而不是从VS2010启动它。
经过一些研究,我发现大多数关于这个问题的评论都是关于未初始化的堆内存等,但是在C ++上下文中。我知道如果变量未初始化,C#会产生错误而不是警告,所以这很可能不是问题。
我的机器和用户的两个版本都是相同的,我现在知道按 F5 (从调试开始)不会产生问题,而 Ctrl + F5 < / em>确实。所以问题不在于两者之间的区别(其他问题已经解决了),而是:如何将调试器附加到 C#进程会影响其行为?!
代码通过网络创建连接。
答案 0 :(得分:7)
所以问题是:如何将调试器附加到C#进程会影响其行为?!
以各种方式。它会影响JIT优化,垃圾收集,计时(想想竞争条件),任何明确尝试检测它是否在调试器中运行的东西,以及可能的类型初始化的顺序和时间。
如果您现在可以重现它,我会开始添加日志记录并查看引导您的位置 - 一旦您弄清楚问题实际是什么,您可能会发现调控器改变原因的原因很明显。