Ich bin neu in C# und habe ein Problem mit dem folgenden Code (ich habe das Ziel-Framework als 4.5 und ich habe hinzugefügt ein Verweis auf System.Numerics):C# 64-Bit-Release-Build gestartet ohne Debugging verhält sich anders als beim Debuggen gestartet (BigInteger)
using System;
using System.Numerics;
namespace Test
{
class Program
{
static BigInteger Gcd(BigInteger x, BigInteger y)
{
Console.WriteLine("GCD {0}, {1}", x, y);
if (x < y) return Gcd(y, x);
if (x % y == 0) return y;
return Gcd(y, x % y);
}
static void Main(string[] args)
{
BigInteger a = 13394673;
BigInteger b = 53578691;
Gcd(a, b);
}
}
}
Wenn das Release-Build mit Debugging (F5 in Visual Studio gestartet wird - und ein Break-Punkt am Ende des Programms, so kann ich die Ausgabe) zu sehen, die ich die Folgende Ausgabe:
GCD 13394673, 53578691
GCD 53578691, 13394673
GCD 13394673, 13394672
GCD 13394672, 1
Allerdings, wenn der Release-Build ohne Debug gestartet wird Ging (Ctrl-F5), erhalte ich folgendes:
GCD 13394673, 53578691
GCD 53578691, 53578691
Merkwürdig, wenn ich eine Console.ReadLine() am Ende des Programms fügen Sie es wie erwartet funktioniert!
Irgendwelche Ideen, was das verursacht? Vielen Dank.
Willkommen zu einem [Heisenbug] (https://en.wikipedia.org/wiki/Heisenbug) –
Hmm ... Ich kann das nicht in VS2015 reproduzieren - ich sehe die erste Ausgabe in beiden Fällen. –
LINQPad verhält sich auf die gleiche Weise - abhängig davon, ob Sie die Optimierung aktivieren oder deaktivieren. Interessant. (Running on Win 7, .NET 4.5.1) – germi