Jestem nowicjuszem C# i napotkam problem z następującym kodem (mam docelową strukturę jako 4.5 i dodałem odniesienie do System.Numerics):Rozpoczęcie kompilacji C# 64-bitowej bez debugowania zachowuje się inaczej niż po uruchomieniu z debugowaniem (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);
}
}
}
Gdy build release rozpoczyna się debugowania (F5 w Visual Studio - a break-point na końcu programu, więc mogę zobaczyć wyjście), otrzymuję następujące wyjście:
GCD 13394673, 53578691
GCD 53578691, 13394673
GCD 13394673, 13394672
GCD 13394672, 1
Jednak, gdy kompilacja wydania zostanie uruchomiona bez debugowania Ging (Ctrl + F5), mam następujące:
GCD 13394673, 53578691
GCD 53578691, 53578691
dziwo jeśli dodać Console.ReadLine() na końcu programu to działa zgodnie z oczekiwaniami!
Jakieś pomysły, co to powoduje? Dzięki.
Witamy w [Heisenbug] (https://en.wikipedia.org/wiki/Heisenbug) –
Hmm ... Nie mogę tego odtworzyć w VS2015 - widzę pierwsze wyjście w obu przypadkach. –
LINQPad zachowuje się w ten sam sposób - w zależności od tego, czy włączasz, czy wyłączasz optymalizację. Ciekawy. (Działa na Win 7, .NET 4.5.1) – germi