Jak zatrzymać się na nie przechwyconym wyjątku

W Debug->Exceptions->Common Language Runtime Exceptions (CTRL+ALT+E) można zaznaczyć, które wyjątki będą rzucane zawsze, a które czasem przechwyci Visual Studio.

Common Language Runtime Exceptions

Poniżej opis sytuacji, w której nie wiedziałem dlaczego aplikacja nie wywali sie na oczywistym wyjątku. Jestem w WinForms, mam breakpointa na kliknięciu przycisku. Przechodząc po kodzie natrafiamy na:

        private void button1_Click(object sender, EventArgs e)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(""); // Exception should be thrown

            System.Windows.Forms.MessageBox.Show(doc.Value.FirstChild.Name);
        }

Gdy checkbox „Thrown” był odznaczony to wyjątek został skonsumowany przez Visual Studio (nie zobaczymy MessageBox’a). Nie jest to działanie domyślne, ale w dużym projekcie, z którym dane mi było właśnie pracować w którymś assembly było ustawienie, żeby tak się zachowywał (nie wiem dokładnie gdzie tego szukać).

Gdy checkbox „Thrown” mamy zaznaczony to Visualowy debugger zatrzyma nas na linijce

doc.Load(""); // Exception should be thrown

z dobrze znanym okienkiem wyjątku.

Dopiero, gdy udekorujemy kod w block try catch, to mamy pewność że Visual Studio nie skonsumuje nam tego wyjątku.

            try
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(""); // Exception should be thrown

                System.Windows.Forms.MessageBox.Show(doc.FirstChild.Name);
            }
            catch (Exception)
            {

                throw;
            }
Reklamy
Ten wpis został opublikowany w kategorii Uncategorized i oznaczony tagami , , . Dodaj zakładkę do bezpośredniego odnośnika.

Jedna odpowiedź na „Jak zatrzymać się na nie przechwyconym wyjątku

  1. Pingback: dotnetomaniak.pl

Możliwość komentowania jest wyłączona.