gpt4 book ai didi

c# - 调试和发布之间的C#区别

转载 作者:行者123 更新时间:2023-12-02 10:48:02 24 4
gpt4 key购买 nike

以下代码在95%的机器上产生相同的输出,但是在几台机器上却有所不同。在 Debug模式下,输出:

Changing from New to Fin
OK

但在 Release模式下:
Changing from New to Fin OK行缺失。该项目针对使用VS 2015构建的.Net 4.0。您可以下载完整的示例 here

源代码
using System;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Status current = Values.Status;
if (current != Next())
Console.WriteLine("OK");
}

static VO Values = new VO();
private static Status Next()
{
Status res = Status.Fin;
if (Values.Status == Status.New && Values.Cond)
res = Status.Fin;
else if (Values.Status == Status.Fin)
res = Status.Fin;

Log("Changing from {0} to {1}", Values.Status, res);
Values.Status = res;
return res;
}
public static void Log(string format, params object[] args)
{
Console.WriteLine(format, args);
}
}

public class VO
{
public Status Status;
public bool Cond;
}

public enum Status { New, Fin }
}

我认为这是重现该错误的最小版本。删除Next()中的某些条件后,内联Log方法,将Values.Cond替换为false会导致应用程序正常运行。

编辑:与硬件无关-操作系统已提取到Hyper-V,问题仍然存在。

最佳答案

根据Hans Passant's注释,使用clrjit.dll 4.6版仍然可以再现该问题。升级到4.7后,它消失了。

关于c# - 调试和发布之间的C#区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42787282/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com