2009-03-31 22 views
9

TException türündeki istisnaları yakalayan genel bir catch işleyicisine sahip bir yöntem içeren aşağıdaki konsol uygulamasını inceleyin. Bu konsol uygulaması Visual Studio hata ayıklayıcı altında 'Debug' yapılandırma ile inşa edilmiş ve yürütülürVisual Studio 2008'i yükledikten sonra yakalama (TException) işleme bloğu davranışı hata ayıklayıcı altında neden farklıdır?

(yani bu * .vshost.exe) Bu başarısız, hem Visual Studio 2005 ve Visual Studio 2008

  • I: beklediğim gibi kod davranır aşağıdaki koşullarda Görsel stuido 2008.

    using System; 
    
    class Program 
    { 
        static void Main() 
        { 
         Console.WriteLine(Environment.Version); 
         CatchAnException<TestException>(); 
    
         Console.ReadKey(); 
        } 
    
        private static void CatchAnException<TException>() 
         where TException : Exception 
        { 
         Console.WriteLine("Trying to catch a <{0}>...", typeof(TException).Name); 
         try 
         { 
          throw new TestException(); 
         } 
         catch (TException ex) 
         { 
          Console.WriteLine("*** PASS! ***"); 
         } 
         catch (Exception ex) 
         { 
          Console.WriteLine("Caught <{0}> in 'catch (Exception ex)' handler.", ex.GetType().Name); 
          Console.WriteLine("*** FAIL! ***"); 
         } 
         Console.WriteLine(); 
        } 
    } 
    
    internal class TestException : Exception 
    { 
    } 
    

    yükledikten sonra bu sorun yalnızca yaklaşık geldi inanıyoruz f 'Release' yapılandırması ile oluşturulmuş, başarılı.

  • Visual Studio (F5) yerine doğrudan .exe aracılığıyla yürütüldüğünde, başarılı olur.
  • Bir hata ayıklayıcısını System.Diagnostics.Debugger.Launch(); satırına Main() satırına ekliyorsanız, yine de başarılı olur.

Konsol uygulaması Visual Studio'dan (2005 veya 2008) başlatıldığında ve bu nedenle ConsoleApplication.vshost.exe altında yürütüldüğünde, başarısız olur. İşte

arızası durumunda bu tuhaf hatasına neden oluyor Ne

2.0.50727.3068 
Trying to catch a <TestException>... 
*** FAIL! *** 

Caught <TestException> in 'catch (Exception ex)' handler. 
    Expected: <TestException> 
    Actual: <TestException> 
    Result of typeof(TException) == ex.GetType() is True 

benim çıkış mı?

cevap

9

Bu gerçekten garip. Sorunun VB.Net ile de var olduğunu doğruladım, bu yüzden C# özel bir sorun değil. Çekirdek hata ayıklayıcı ekip tarafından onaylanması gerekecek, ancak bir hataya benziyor.

Lütfen Connect numaralı telefona bir hata gönderin ve hata numaralarını OP'ime yorum olarak gönderin, böylece doğru takıma yönlendirildiğinden emin olabilirsiniz.

+1

görünüyor: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=362422&wa=wsignin1.0 Görünüşe zaten sabit ama hangi sürümünü belli değil CLR, içeride veya serbest bırakıldığında. –

+0

@Daniel, bu CLR'de bir sorun oldu ve CLR 4.0'da (ve buna karşılık Visual Studio'nun sonraki sürümünde) düzeltilecek. – JaredPar

+0

Ayrıca, hata 64 bit CLR kullanılarak yok. (https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=386652) –

2

Bu, CLR'deki bir hatanın neden olduğu bilinen bir sorundur. CLR 4.0'da düzeltilmiştir (henüz yayınlanmamıştır).

Bu yardım için JaredPar'a teşekkürler. Daha fazla ayrıntı için cevabındaki yorumları görün ve the original bug report on Microsoft Connect'a bağlantı verin. Bu zaten burada Connect'e büyüdü gibi

İlgili konular