Ein Hoch dem Visual-Studio-Debugger
Es ist sicherlich jedem C-Programmierer bereits einmal passiert:
if (i = 5) { ... }
Ein kleines Gleichheitszeichen fehlt, und der Code repräsetiert nicht einen Vergleich, sondern eine Zuweisung. Da dies (natürlich) gültig ist, besteht kein Grund für einen Compilerfehler. Ein simpler Anfängerfehler, könnte man sagen. Zumindest in reinem C/C++. In neueren C-Dialekten - wie Java oder C# - führt derartiges unweigerlich zu einem Compilerfehler. "Cannot implicitly convert type 'int' to 'bool'" meint der C#-Compiler. "Type mismatch: cannot convert from int to boolean" stimmt der Java-Compiler (unter Eclipse) ein.
Der Fehler des vergessenen Gleichheitszeichens gehört also der Vergangenheit an - möchte man meinen. Trotzdem, es besteht Grund zur Sorge: Der C#-Debugger. Dieser bietet "conditional Breakpoints" an; Breakpoints, die nur anspringen, wenn eine Boolesche Bedingung TRUE ist. "Condition .... Is true" steht jedenfalls in der Eingabemaske. Also genau der Fall wie oben beschrieben - möchte man meinen.
Tatsächlich erlaubt der Debugger an der Stelle allerdings beliebigen Code. Auch ein "Console.Out.WriteLine("test");" ist hier möglich - ohne Prüfung, ob auch tatsächlich ein boolean-Wert zurückgegeben wird. Womit auch der Anfängerfehler wieder möglich wird: die Condition "i = 5" ist absolut gültig. Und der Mensch vor dem Bildschirm wundert sich, warum das Programm ohne Debugger fast, mit Debugger aber gar nicht mehr das tut, was es sollte ....
if (i = 5) { ... }
Ein kleines Gleichheitszeichen fehlt, und der Code repräsetiert nicht einen Vergleich, sondern eine Zuweisung. Da dies (natürlich) gültig ist, besteht kein Grund für einen Compilerfehler. Ein simpler Anfängerfehler, könnte man sagen. Zumindest in reinem C/C++. In neueren C-Dialekten - wie Java oder C# - führt derartiges unweigerlich zu einem Compilerfehler. "Cannot implicitly convert type 'int' to 'bool'" meint der C#-Compiler. "Type mismatch: cannot convert from int to boolean" stimmt der Java-Compiler (unter Eclipse) ein.
Der Fehler des vergessenen Gleichheitszeichens gehört also der Vergangenheit an - möchte man meinen. Trotzdem, es besteht Grund zur Sorge: Der C#-Debugger. Dieser bietet "conditional Breakpoints" an; Breakpoints, die nur anspringen, wenn eine Boolesche Bedingung TRUE ist. "Condition .... Is true" steht jedenfalls in der Eingabemaske. Also genau der Fall wie oben beschrieben - möchte man meinen.
Tatsächlich erlaubt der Debugger an der Stelle allerdings beliebigen Code. Auch ein "Console.Out.WriteLine("test");" ist hier möglich - ohne Prüfung, ob auch tatsächlich ein boolean-Wert zurückgegeben wird. Womit auch der Anfängerfehler wieder möglich wird: die Condition "i = 5" ist absolut gültig. Und der Mensch vor dem Bildschirm wundert sich, warum das Programm ohne Debugger fast, mit Debugger aber gar nicht mehr das tut, was es sollte ....
Kommentare