C# Programm beendet sich beim Debuggen einfach

Registriert
Mai 2007
Beiträge
150
Hallo Leute,

Ich habe mit VS2010 ein Problem. Ich habe dort eine recht umfangreiche Software programmiert, die sich aber manchmal beim Debuggen beendet. Das geschieht aufgrund von einem Fehler, den ich nicht finde. Warum gibt der Debugger keinen Fehler aus, sondern beendet sich nur?

ich hatte das schonmal, da habe ich dann einen bereich mit Haltemarken versehen, um den Fehler einzugrenzen. Das hat dann letztendlich auch geklappt. Nur mittlerweile ist das Programm so umfangreich, das diese Methode nicht klappen wird, da ich den Bereich nicht eingrenzen kann.

Wie kann ich VS dazu bringen den Fehler richtig anzuzeigen?

Stefan
 
Überprüfst du Objekte vor dem Casten auf Null?
Setze auch viele TryCatch-Anweisungen. Notfalls auch global machen.
 
Du hast eine Exception. Dies muss aber nicht Thread[bergreifend sein. Ich denke es ist ein bug in der VS. Habe auch ab und zu einfach Programmende obwohl an der oberste Stelle ein Try-Catch-Block steht.

Ohne Updates funktioniert die VS normal mit alle Exception catches. Erst nach paar sicherheitspatches habe ich ab und zu das Gleiche wie du!
 
Wie meinst du das mit dem überprüfen? Ich weiss gerade nicht was du meinst.
Kann ich nicht VS dazu bringen diese Fehler anzuzeigen?
 
Also zb.
Code:
if (stringFoo != null) {//...}
if (AnObject != null) {//...}

Obwohl ich alle Updates bei mir draufhabe, hab ich keine Fehler in der IDE. Allerdings bricht er manchmal wirklich grundlos bei Invokes oder Threadzugriffen ab.
Wie schon gesagt, notfalls in der Program.cs ein TryCatch setzen, wenn du gar nicht weißt, wo er rausfliegt.

Mein Tipp: Das Addon ReSharper, erleichtert Coden und Testen von einzelnen Methoden ungemein! (Für Studenten/Schüler kostenlos)
 
Zuletzt bearbeitet:
Habe jetzt die Program.cs so bearbeitet:

Code:
static class Program
    {
        public static BeatGrabber MainForm;

        static void Main()
        {
            try
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                MainForm = new BeatGrabber();
                Application.Run(MainForm);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }
    }

Hat aber leider nichts gebracht, das Programm beendet sich weiterhin manchmal ohne Kommentar.
 
Baust du Datenverbindungen übers Netzwerk aus? Greifst du viel (aus mehreren Threads) auf (die gleiche) Dateie/n zu? Und halt wie gesagt, bei expliziten Konvertierungen vorher prüfen.

das sind so heikle Punkte, die ich als erstes überprüfen würde.
Ohne Programmcode können wir dir aber sonst auch nicht weiterhelfen
 
Zuletzt bearbeitet:
Falls im Debug-Output-Fenster die Exception angezeigt wird, mit der das Programm abbricht, aktiviere doch einen Haltepunkt, wenn diese geworfen wird, dann stoppt der Debugger bereits da und nicht erst wenn sie gecatcht (oder das Programm einfach beendet) wird.

Einstellen kannst du das hier:

Menü Debuggen->Ausnahmen...->Common Language Runtime Exceptions (oder im Dialog danach suchen lassen), und dann Häkchen machen bei Ausgelöst.
 
Ich glaube ich habe das Problem gefunden:

Ein FileSystemWatcher Created Event wurde ausgelöst. Darin wird auf die Datei zugegriffen, ehe diese neue Datei fertiggestellt ist.

Da darf man sich doch wirklich wundern, warum VS da nichts sagt, sondern einfach die Software beendet....

Naja, wenn noch jemand eine Idee hat, wie man sowas in Zukunft schneller finden kann, sehr sehr gern :-)
 
Das versteh ich nicht was du da schreibst. Das Created Event wird wie gesagt nur beim Erstellen gefeuert, da wird keine Datei geöffnet oder geschrieben oder ähnliches.
Das heißt DU musst irgendwie die Datei im Beschlag haben und dort drin rumwursteln, wenn du sagst "sie ist noch nicht fertig gestellt". Weil das erstellen einer Datei kann in meinen Augen niemals solange dauern das du dort mit irgendwas kollidierst.
 
Ich kopiere mehrere MB große Dateien in einen Ordner, der überwacht wird. Das löst das Event aus, noch bevor der Kopiervorgang abgeschlossen ist.
 
Zurück
Oben