TryCatch - Bug mit DebuggerStepThroughAttribute ??

  • C#
  • .NET (FX) 4.0

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    TryCatch - Bug mit DebuggerStepThroughAttribute ??

    Kannst du benannte Verhaltens-Inkonsistenz reproduzieren? 8
    1.  
      Ja (5) 63%
    2.  
      Nein (3) 38%
    3.  
      Bei mir zeigen sich andere Probleme (0) 0%
    Hi!

    Ich schreibe grade Tests, und stiess auf folgendes Mysterium:

    C#-Quellcode

    1. public class tstDebuggerStepThrough {
    2. public void DebuggerStepThroughTest() {
    3. var converter = new DelegateContainer();
    4. converter.Delegate = o => int.Parse((string)o);
    5. var result = converter.Convert("9"); // konvertiere "9" -> 9
    6. try {
    7. result = converter.Convert(9); // InvalidCastException provozieren
    8. }
    9. catch (Exception x) {
    10. MessageBox.Show(x.GetType().Name);
    11. }
    12. }
    13. } // end class tstDebuggerStepThrough
    14. class DelegateContainer {
    15. public Func<object, object> Delegate;
    16. //[System.Diagnostics.DebuggerStepThrough()] // Throwing failt, wenn dieses gesetzt
    17. public object Convert(object o) {
    18. try { return Delegate(o); }
    19. catch (Exception x) { return HandleException(x); }
    20. }
    21. public static object HandleException(Exception ex) {
    22. // im Designmode nicht werfen, sondern Fehlertext returnen
    23. throw ex;
    24. }
    25. } // end class DelegateContainer
    Wenn ich in Zeile #19 das DebuggerStepThrough-Attribut setze, failt der trycatch(#7 - #12), und stattdessen gibts den Standard-Fehler-Codestop.
    Es hat auch damit zu tun, dass ich das Werfen des Fehlers in die statische Methode delegiere.

    Aber iwie irre, dass [DebuggerStepThrough] den TryCatch ausser Kraft setzt 8|

    Könnt ihr das Verhalten reproduzieren?
    Ah - das ist doch typischer Fall für eine Umfrage 8o

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()

    ErfinderDesRades schrieb:

    den Standard-Fehler-Codestop
    bekomme ich nicht, zwei Mal eine freundliche MessageBox.
    W10, Studio 2013 Ultimate.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RushDen schrieb:

    auskommentiert

    RodFromGermany schrieb:

    zwei Mal
    Oder glaubst Du, ich führe den Test 2 Mal durch in der Hoffnung, verschiedene Resultate zu bekommen? :D
    =======================
    @ErfinderDesRades Habs mit allen Frameworks probiert, stets kommt die MessageBox.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    interessanterweise kann ich nach dem Codestop einfach weiter-steppen, und dann geht er auch richtig in den Catch, und ich krieg auch die Messagebox.

    Also der Catch funktioniert doch - nur der Codestop ist irregulär.

    (sonst bin ich ja immer für Codestop, aber jetzt grad bischen mit automatisierteren Tests unterwegs - da kannich das grad nicht brauchen :thumbdown: )
    Ich hab mir den Code mal kopiert...ich kann das Verhalten nachproduzieren. Also das DebuggerStepThrough auskommentiert einen Breakpoint auf die void DebuggerStepThroughTest() gesetzt und im Einzelschritt durchgegangen. Einmal mit und einmal mit ohne dem Attribut.
    Wenn ich das Attribut auskommentiert hatte, dann kam ganz normal und erwartet die MessageBox. Mit aktiviertem Attribut kommt der normale Exception Text (try catch wird ausgehebelt)
    Lustigerweise wenn ich mit F11 weiter "steppe", dann kommt bei mir die Messagebox doch noch daher.
    Bilder
    • bandicam 2016-02-27 23-40-09-271.jpg

      242,19 kB, 1.358×632, 92 mal angesehen
    • bandicam 2016-02-27 23-40-10-299.jpg

      138,7 kB, 1.358×632, 87 mal angesehen
    • bandicam 2016-02-27 23-40-11-033.jpg

      138,58 kB, 1.358×632, 100 mal angesehen
    • bandicam 2016-02-27 23-40-11-941.jpg

      171,69 kB, 1.358×632, 98 mal angesehen
    • bandicam 2016-02-27 23-40-12-427.jpg

      171,12 kB, 1.358×632, 107 mal angesehen
    • bandicam 2016-02-27 23-40-12-959.jpg

      170,11 kB, 1.358×632, 99 mal angesehen
    • bandicam 2016-02-27 23-40-15-988.jpg

      162,99 kB, 1.358×632, 103 mal angesehen
    • bandicam 2016-02-27 23-40-16-680.jpg

      170,47 kB, 1.358×632, 108 mal angesehen
    • bandicam 2016-02-27 23-40-17-492.jpg

      161,31 kB, 1.358×632, 83 mal angesehen
    • bandicam 2016-02-27 23-40-18-092.jpg

      162,16 kB, 1.358×632, 88 mal angesehen
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    @ErfinderDesRades

    Ich kann's auch nicht reproduzieren...
    Win7
    VS Professional 2013 (Version 12.0.40629.00 Update5)
    FW 4.5.51209

    Ich hab's interessenshalber einmal nach VB übersetzt - da ist's genauso...

    Lg

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    @ErfinderDesRades Erwischt.
    W8.1 (W8.1 => W10 => W8.1) InvalidCast bei DebuggerStepThrough() und 4.5 | 4.0.,
    W7 InvalidCast bei DebuggerStepThrough() und 4.5 | 4.0.
    Identischer Code wie oben bei W10,
    hier Studio 13 Professional,
    oben war es Studio 2013 Ultimate,
    da kam die MessageBox.
    ====
    Leider kann ich nur ein Mal abstimmen.

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()