Laden...

VS2010, Zugriff auf nicht initialisierte Liste erzeugt keinen Laufzeitfehler im Debugger?

Erstellt von PoWl vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.329 Views
P
PoWl Themenstarter:in
219 Beiträge seit 2008
vor 9 Jahren
VS2010, Zugriff auf nicht initialisierte Liste erzeugt keinen Laufzeitfehler im Debugger?

Hi,

ich habe hier ein komisches Problem in meinem Projekt. Mir fiel auf, dass die Bearbeitung des Eventhandlers irgendwo zwischendrin offenbar einfach aufhörte. Mittlerweile ist mir auch klar, was dazu führt, nämlich eine nicht initialisierte Liste. Also habe ich mal alles unnötige aus dem Code entfernt und ihn aufs wesentliche reduziert um den Fehler besser nachzustellen.

  public partial class Form1 : Form
    {
        class DesktopCleanerDataset
        {
            public List<string> ignoredExtensions;
            public List<string> ignoredElements;

            // Initialisierung
            public DesktopCleanerDataset()
            {
                ignoredExtensions = new List<string>();
                //ignoredElements = new List<string>();
            }
        }

        DesktopCleanerDataset data;


        public Form1()
        {
            InitializeComponent();
            data = new DesktopCleanerDataset();
        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {
            Console.WriteLine("#1");
            data.ignoredExtensions.Clear();
            Console.WriteLine("#2");
            data.ignoredElements.Clear();
            Console.WriteLine("#3");
        }
    }

data.ignoredElements.Clear(); kann nicht funktionieren, da ich die Initialisierung oben auskommentiert habe.

Dennoch erzeugt das Programm im Debug-Modus von Visual C# Express 2010 keinen Laufzeitfehler oder sonstiges. In der Console erscheint nur

#1
#2

und das wars. Das Programm arbeitet ganz normal weiter aber die Bearbeitung des Eventhandlers hört ab dem Fehler einfach auf.

Hab ich da irgendetwas verstellt oder warum krieg ich hier keinen Laufzeitfehler ausgegeben?

Gelöschter Account
vor 9 Jahren

Das was du schilderst halte ich im Laufzeit-Modus für ausgeschlossen, (anders wäre es wenn du im Designer operierst)

Ich würde (zur Laufzeit) in diesem Fall wie folgt vorgehen.
List<string>(ignoredElements) durch eine eigene StringCollection Klasse ersetzen (die von von List<string> erbt) und mit einem Ctor versehen und dann hier im Ctor einen Haltepunkt setzen und anschliessend den StrackTrace prüfen. Problem erkannt!

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo PoWl,

in den einstellungen von VS gibt es einen Haken, ob der Debugger bei Exceptions automatisch anhalten soll oder nicht.

BTW: Wenn du (potenziell) viele Elemente in den Listen hast, solltest du besser HashSet<String>.Contains verwenden, um zu prüfen, ob ein Element enthalten ist (so eine Prüfung wirst du ja an irgendeiner Stelle im Code habe, selbst wenn sie im Ausschnitt nicht zu sehen ist).

Hallo Sebastian.Lange,

der Tipp mit der Unterklasse würde im konkreten Fall (bezogen auf ignoredElements) m.E. nichts bringen, weil die Initialisierung auskommentiert und damit der Ctor gar nicht aufgerufen wird. Selbst wenn die Initialisierung nicht auskommentiert wäre, würde man in StackTrace nur sehen, wo die Initalisierung erfolgt. Gesucht ist (bzw. war) aber die Stelle an der der (Null-)Zugriff erfolgt.

herbivore

P
PoWl Themenstarter:in
219 Beiträge seit 2008
vor 9 Jahren

Hi,

danke soweit für die Hilfe! Das muss aber irgendwie projektspezifisch sein. Wenn ich ein neues Projekt erstelle und dort eine ähnliche Situation hervorrufe werden die Exceptions behandelt und das Programm bricht ab. Ich kann mich auch nicht erinnern da je was umgestellt zu haben, zumal die VS2010 Installation noch recht jungfräulich ist 🙁

Habe grade den Code mal in ein neues Projekt übertragen, gleiches Verhalten, es muss also an Code/VS-Einstellungen liegen. Aber ich finde die Einstellung nirgendwo 🤔