Laden...

VS Express: Debugger zeigt auftretende/unbehandele Exception nicht an

Erstellt von uglykidkap vor 12 Jahren Letzter Beitrag vor 12 Jahren 3.384 Views
Hinweis von herbivore vor 12 Jahren

Ursprünglicher Titel war: Bug in C# Convert.ToInt32() ?

U
uglykidkap Themenstarter:in
36 Beiträge seit 2009
vor 12 Jahren
VS Express: Debugger zeigt auftretende/unbehandele Exception nicht an

Hallo,

folgender Code löst bei mir ein Programmverhalten aus, das ich mir nicht erklären kann:



private void Form1_Load(object sender, EventArgs e)
        {
            object test = new object();

// beendet funktion ohne exception:
            int x = Convert.ToInt32(test);

// wird nicht ausgeführt:
            this.Text = "test";
        }


Die Funktion wird ohne Exception beendet. Der nachfolgende Code wird schlicht weg ignoriert.

Weiß einer warum?

1.130 Beiträge seit 2007
vor 12 Jahren

Ich bekomm da folgendes:> Fehlermeldung:

Das Objekt des Typs "System.Object" kann nicht in Typ "System.IConvertible" umgewandelt werden.

Probier mal folgendes:


            try
            {
                Convert.ToInt32(new object());
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.ToString(),ex.GetType().Name);
            }

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

U
uglykidkap Themenstarter:in
36 Beiträge seit 2009
vor 12 Jahren

Hallo Floste,

dein Code wirft bei mir eine Exception.

Meiner bleibt nach wie vor stumm, keine Exception etc.

Eine Try-Catch Anweisung hilft bei meiner Variante auch nicht weiter...

Welche VS Version nutzt du?

Ich verwende VC# 2010 Express.

Mfg,

uglykidkap

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo uglykidkap,

warum du zum Schluss eines Bugs kommst ist mir nicht klar. Die Convert.ToInt32 ist sichlich keine Methode die selten verwendet wird und die es auch schon lange in .net gibt. Wäre hier tatsächlich ein Bug vorhanden, so wäre dieser sicher schon längst gefixt worden sein.

Bei solchen Fällen sollte der Fehler zuerst immer beim eigenen Code gesucht werden.

Die Exception wird bei dir im Application.ThreadException Event (System.Windows.Forms) behandelt od. im AppDomain.UnhandeldException.

BTW: mit int.TryParse bist du sicherer dran.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

U
uglykidkap Themenstarter:in
36 Beiträge seit 2009
vor 12 Jahren

Ich behaupte nicht das ein BUG existiert sonder FRAGE ob es einer ist.

Wenn der Fehler in meinem Code liegt, dann zeig mir doch bitte wo sich in den 3 Zeilen Code "mein Fehler" versteckt.


private void Form1_Load(object sender, EventArgs e)
        {
            // wirft keine Exception
            object x = new object();

            int y = Convert.ToInt32(x);

            // wirft exception
            try
            {
                object a = new object();

                int b = Convert.ToInt32(a);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), ex.GetType().Name);
            }

        }

Warum?

6.911 Beiträge seit 2009
vor 12 Jahren

Hallo uglykidkap,

dann zeig mir doch bitte wo sich in den 3 Zeilen Code "mein Fehler" versteckt.

in

  
int y = Convert.ToInt32(x);  
...  
int b = Convert.ToInt32(a);  
  

ist der Fehler.

Schau dir meinen oberen Post an, und handle diesen beiden Events. Dann wirst du sehen dass der Fehler auch ohne try-catch geworfen wird.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

2.298 Beiträge seit 2010
vor 12 Jahren

Ich denke er bezog sich auf den Code im Eingangsbeitrag:


private void Form1_Load(object sender, EventArgs e)
        {
            object test = new object();

// beendet funktion ohne exception:
            int x = Convert.ToInt32(test);

// wird nicht ausgeführt:
            this.Text = "test";
        } 

Hallo uglykidkap,

du verschluckst nicht irgendwo die Exception, zum Beispiel durch globales Abfangen?

// Edit:

Ich habe es eben mal getestet, wenn ich Application.ThreadException aboniere und diesen leer lasse, kann ich dein Problem nachvollziehen. Hast du dies denn aboniert?

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

U
uglykidkap Themenstarter:in
36 Beiträge seit 2009
vor 12 Jahren

Hallo inflames2k,

danke für deinen Post.

Ich denke er bezog sich auf den Code im Eingangsbeitrag:

Danke, genau das meinte ich 😉

du verschluckst nicht irgendwo die Exception, zum Beispiel durch globales Abfangen?

Nein, das Projekt besitzt nicht mehr Zeilen Code als hier gepostet.

Ich habe es eben mal getestet, wenn ich Application.ThreadException aboniere und diesen leer lasse, kann ich dein Problem nachvollziehen. Hast du dies denn aboniert?

Nein, habe ich nicht.

Ich habe nur ein leeres Windows Forms Projekt erstellt, die 3 Zeilen Code hineinkopiert und gestartet.

Kannst du mir mal deinen Code zeigen wo du Application.ThreadException abonnierst?

@gfoidl:

Danke für den Link, hab ich beim ersten Lesen irgendwie übersehen. Werd mir das morgen mal durchlesen.

Danke und Gruß,

uglykidkap

F
155 Beiträge seit 2009
vor 12 Jahren

Hallo uglykidkap,

ich habe das selbe Problem wie du, unbehandelte Exceptions werden von Visual Studio 2010 Express nicht mehr angezeigt sondern einfach übersprungen.
Erst wenn ich einen Try/Catch Block einsetze stoppt VS und zeigt mir den Fehler an.

Probier mal den Code nicht in Form Load sondern im Konstruktor auszuführen, wenn ich das mache bekomme ich die Fehlermeldung angezeigt.

MfG
fz

"We better hurry up and start coding, there are going to be a lot of bugs to fix."

K
62 Beiträge seit 2009
vor 12 Jahren

Hast Du überhaupt "Break, when an exception is Thrown" aktiviert?

-> Debug -> Exceptions

Bei "Common Language Runtime Exceptions" einen Haken bei "Thrown" setzen und nochmal probieren.

2.891 Beiträge seit 2004
vor 12 Jahren

du verschluckst nicht irgendwo die Exception, zum Beispiel durch globales Abfangen?

Nicht direkt - allerdings kommt das Verhalten zustande, da die Methode ein Eventhandler für das Form.Load-Ereignis ist. Wenn dort eine Exception geworfen wird, wird die einfach geschluckt.

F
155 Beiträge seit 2009
vor 12 Jahren

Hallo,

bei mir war es wie Kileak sagte, jedoch war der Menüpunkt -> Debuggen -> Ausnahmen nicht vorhanden.

Gewusst wie: Unterbrechen bei ausgelöster Ausnahme, hier ist beschrieben wie er hinzugefügt werden kann.

Nachdem ich dort das Häcken gesetzt habe läuft alles wie gewohnt.

Vielen Dank 😃

fz

"We better hurry up and start coding, there are going to be a lot of bugs to fix."

U
uglykidkap Themenstarter:in
36 Beiträge seit 2009
vor 12 Jahren

Hallo Zusammen,

danke für den Link, das hat mein Problem gelöst!

Der Code im Threadeingang wird nun mit einer Exception unterbrochen.

Vielen Dank!

Grüße,

uglykidkap