www.wikidata.de-de.nina.az
Im Jargon der Computerprogrammierung ist ein Heisenbug ein Softwarefehler der zu verschwinden oder sein Verhalten zu verandern scheint wenn man versucht ihn zu untersuchen 1 Der Begriff ist ein Wortspiel mit dem Namen Werner Heisenberg dem Physiker der als erster den Beobachtereffekt der Quantenmechanik geltend machte der besagt dass der Akt der Beobachtung eines Systems unweigerlich seinen Zustand verandert In der Elektronik ist der traditionelle Begriff der Sondeneffekt bei dem das Anbringen einer Testsonde an ein Gerat dessen Verhalten verandert Beispiele BearbeitenHeisenbugs treten meist auf bei Programmierfehlern die durch das Untersuchen Debuggen eines Computerprogramms beeinflusst werden wie z B das Einfugen von Eingabe und Ausgabe Anweisungen oder die Ausfuhrung Berechnung mit einem Debugger wodurch als Nebeneffekt das Verhalten des Programms auf subtile Weise verandert wird wie z B die Anderung der Speicheradresse von Variablen und der Zeitpunkt der Ausfuhrung Ein typisches Szenario die zu einem Heisenbug fuhrt sind Race Condition Fehler Dabei fuhrt die Untersuchung selbst zu einer Veranderung des Timings der Anwendung und der beobachtete Fehler tritt deswegen nicht mehr auf Dies kann durch zusatzliche Diagnoseausgaben entstehen oder aber bereits allein dadurch dass ein Debugger aktiv ist Ein Beispiel fur einen Heisenbug ist ein Programmierfehler der zu einem Laufzeitfehler fuhrt wenn das Programm mit einem optimierenden Compiler kompiliert wird aber nicht wenn dasselbe Programm ohne Optimierung kompiliert wird wie es oft zum Zweck der Untersuchung mit einem Debugger gemacht wird Wahrend des Debuggens werden Werte die ein optimiertes Programm normalerweise in Registern behalten wurde oft in den Hauptspeicher geschoben Dies kann z B das Ergebnis einer Fliesskommarechnung beeinflussen da der Wert im Speicher einen kleineren Bereich und eine geringere Genauigkeit haben kann als der Wert im Register In ahnlicher Weise konnen Heisenbugs durch Nebenwirkungen in Testausdrucken verschwinden Der Fehler tritt wahrend der Entwicklung nicht auf da zur Laufzeit die Assertions in Sprachen wie C und C ausgefuhrt werden der Testausdruck wird jedoch nicht mehr ausgewertet wenn im Produktionscode mit dem Makro a href Assert h html class mw redirect title Assert h NDEBUG a die Assertions abgeschaltet werden nun tritt der Fehler auf Andere Ursachen von Heisenbugs sind Programmierfehler wie das Verwenden des Wertes einer nicht initialisierten Variablen die ihre Adresse und oder ihren Anfangswert wahrend des Debuggens andern kann oder das Folgen eines invaliden Zeigers der beim Debuggen auf eine andere Stelle verweisen kann Debugger erlauben im Allgemeinen auch die Verwendung von Haltepunkten oder bieten andere Benutzeroberflachen die zusatzlichen Quellcode verursachen wie z B Property Accessoren welcher im Verborgenen ausgefuhrt wird was Timing relevante Fehler verbergen kann Einzelnachweise Bearbeiten heisenbug Abgerufen am 17 April 2020 Abgerufen von https de wikipedia org w index php title Heisenbug amp oldid 241621093