206:, may not occur when the program is slowed down by single-stepping source lines in the debugger. This is particularly true when the behavior involves interaction with an entity not under the control of a debugger, such as when debugging network packet processing between two machines and only one is under debugger control.
197:
End-Users can experience a heisenbug when the act of making a screenshot of the heisenbug for observation fixes the heisenbug and the screenshot shows a perfectly working state. This effect can happen when complex stacks of software work together, for example a web browser using a hardware graphic
317:
particle) is a bug that is predicted to exist based upon other observed conditions (most commonly, vaguely related log entries and anecdotal user reports) but is difficult, if not impossible, to artificially reproduce in a development or test environment. The term may also refer to a bug that is
364:
Heisenbugs are difficult to identify and fix; often attempting to resolve them leads to further unexpected behavior. Because the problem manifests as the result of a separate, underpinning bug, the behavior can be hard to predict and analyze during debugging. Overall the number of heisenbugs
201:
Time can also be a factor in heisenbugs, particularly with multi-threaded applications. Executing a program under control of a debugger can change the execution timing of the program as compared to normal execution. Time-sensitive bugs, such as
513:
The following article investigates the various definitions of bohrbug, mandelbug and heisenbug proposed in the literature, as well as the statements made about the relationships between these fault types: Grottke, Michael; and
597:"Such transient software failures have been given the whimsical name 'Heisenbug' because they disappear when reexamined. By contrast, 'Bohrbugs' are good solid bugs." (IEEE Computer Group News, Volume 24, Numbers 7–12, 1991)
150:, but not when the same program is compiled without optimization (as is often done for the purpose of examining it with a debugger). While debugging, values that an optimized program would normally keep in
737:
158:
comparisons, since the value in memory may have smaller range and accuracy than the value in the register. Similarly, heisenbugs may be caused by side-effects in test expressions used in runtime
330:, in a paper about software failures (and is sometimes mistakenly attributed to him because of this publication) and also in 1986 by Jonathan Clark and Zhahai Stewart on the mailing list (later
678:
789:
179:
Other common causes of heisenbugs are using the value of a non-initialized variable (which may change its address or initial value during debugging), or following an
635:
718:
210:
318:
obvious in the code (mathematically proven), but which cannot be seen in execution (yet difficult or impossible to actually find in existence).
851:
846:
724:
This is the
Heisenberg Uncertainty Principle as applied to debugging (an instance of such a bug was called a "Heisenbug" by one participant.)
536:
715:
Proceedings of the ACM SIGSOFT/SIGPLAN Software
Engineering Symposium on High-Level Debugging, Pacific Grove, California, March 20–23, 1983
557:
295:) is a bug that manifests itself in running software after a programmer notices that the code should never have worked in the first place.
353:
460:
159:
765:
183:
327:
76:, which states that the act of observing a system inevitably alters its state. In electronics, the traditional term is
674:
499:
841:
69:
744:
This the
Heisenberg Uncertainty Principle as applied to Debugging, sometimes called the "Heisenbug" Principle .
442:
163:
194:(such as property accessors) to be executed stealthily, which can, in turn, change the state of the program.
292:
139:, usually have the side-effect of altering the behavior of the program in subtle ways, such as changing the
815:
831:
374:
198:
card acceleration which causes rendering errors on the physical screen that do not show on a screenshot.
170:, where the test expression is not evaluated when assertions are turned off in production code using the
276:) by revealing more bugs (the deeper a developer goes into the code to fix it the more bugs they find).
146:
One common example of a heisenbug is a bug that appears when the program is compiled with an optimizing
132:
288:
269:
257:
230:
45:
303:
836:
783:
656:
151:
554:
186:(which may point to a different place when debugging). Debuggers also commonly allow the use of
115:) have been occasionally proposed for other kinds of unusual software bugs, sometimes in jest.
771:
761:
515:
73:
61:
734:
Proceedings of the IEEE 5th
International Conference on Distributed Computing Systems (ICDCS)
682:
640:
456:
180:
124:
573:
56:
that seems to disappear or alter its behavior when one attempts to study it. The term is a
561:
385:
273:
246:
621:
261:
222:
203:
155:
140:
478:
264:) is a bug whose causes are so complex it defies repair, or makes its behavior appear
825:
379:
17:
265:
128:
77:
53:
31:
636:"20 Hilarious Programming Jargon Phrases You Should Use When Talking to Engineers"
805:
758:
Reliable distributed systems : technologies, Web services, and applications
314:
214:
191:
810:
421:
404:
695:""A Conversation with Bruce Lindsay", ACM Queue vol. 2, no. 8 - November 2004"
335:
226:
218:
187:
154:
are often pushed to main memory. This may affect, for instance, the result of
81:
38:
775:
694:
346:
65:
382:—a tool that automatically explores executions likely to expose Heisenbugs
349:
interview that he was present when the
Heisenbug was originally defined.
272:. The term also refers to a bug that exhibits fractal behavior (that is,
172:
147:
136:
249:, they do not change their behavior and are relatively easily detected.
331:
245:, by way of contrast, is a "good, solid bug". Like the deterministic
736:, IEEE Computer Society, Computer Society Press, 1985, pp. 515-522
607:
167:
213:. Frustrated programmers may humorously blame a heisenbug on the
555:"Java toString() override with initialization as a side effect"
342:
229:
affecting the hardware, a well-documented phenomenon known as
57:
217:, or (if it has occurred only once) may explain it away as a
524:
Journal of the
Reliability Engineering Association of Japan
365:
identified should decrease as a piece of software matures.
520:
Software Faults, Software Aging and
Software Rejuvenation
728:
Also cited in LeBlanc, Richard J.; Robbins, Arnold D.;
538:
Fighting Bugs: Remove, Retry, Replicate, and
Rejuvenate
190:
or provide other user interfaces that cause additional
657:"Why Do Computers Stop And What Can Be Done About It?"
818:, a heisenbug that took almost nine months to solve.
123:
Heisenbugs occur because common attempts to debug a
30:
For the Linux distribution codenamed
Heisenbug, see
27:Software bug that seems to change when debugging
742:
730:Event-Driven Monitoring of Distributed Programs
722:
143:of variables and the timing of its execution.
717:, Association for Computing Machinery, 1983,
209:Heisenbugs can be viewed as instances of the
8:
788:: CS1 maint: multiple names: authors list (
545:vol. 40, no. 2 (February 2007), pp. 107–109
535:Grottke, Michael; and Trivedi, Kishor S.;
211:observer effect in information technology
588:, HarperCollins College Publishers, 1995
473:
471:
416:
414:
396:
306:) is a bug with catastrophic behavior.
781:
7:
526:, Vol. 27, No. 7, pp. 425–438, 2005.
806:The Heisenberg Debugging Technology
816:OpenOffice won't print on Tuesdays
112:
84:to a device changes its behavior.
25:
479:"The Jargon File: Schroedinbug"
341:Bruce Lindsay, a researcher at
462:The Ghost from the Grand Banks
1:
852:Software engineering folklore
847:Computer programming folklore
326:The term was used in 1985 by
756:P., Birman, Kenneth (2005).
422:"The Jargon File: Mandelbug"
405:"The Jargon File: heisenbug"
501:The New Hacker's Dictionary
444:The New Hacker's Dictionary
356:publications is from 1983.
868:
36:
29:
352:An earlier appearance in
622:"New Programming Jargon"
37:Not to be confused with
87:Similar terms, such as
68:who first asserted the
760:. New York: Springer.
746:
726:
375:Cargo cult programming
677:- (23 December 1986)
661:Technical Report 85.7
345:, affirmed in a 2004
162:in languages such as
465:, Bantam Books, 1990
231:single event effects
127:, such as inserting
111:(see the section on
80:, where attaching a
46:computer programming
18:Unusual software bug
811:A Story About Magic
738:Google Books search
719:Google Books search
673:(16 December 1986)
663:. Tandem Computers.
574:"phase of the moon"
504:, 3rd edition, 1996
447:, 3rd edition, 1996
304:Hindenburg disaster
655:Gray, Jim (1985).
586:Exploring Language
584:Goshgarian, Gary;
560:2014-12-30 at the
516:Trivedi, Kishor S.
498:Raymond, Eric S.;
441:Raymond, Eric S.;
293:thought experiment
679:RISKS DIGEST 4.34
675:RISKS DIGEST 4.30
457:Clarke, Arthur C.
313:(named after the
302:(named after the
289:Erwin Schrödinger
270:non-deterministic
258:Benoît Mandelbrot
215:phase of the moon
129:output statements
74:quantum mechanics
62:Werner Heisenberg
16:(Redirected from
859:
842:Software testing
794:
793:
787:
779:
753:
747:
712:
706:
705:
703:
702:
691:
685:
683:Peter G. Neumann
671:
665:
664:
652:
646:
645:
641:Business Insider
632:
626:
625:
618:
612:
611:
604:
598:
595:
589:
582:
576:
570:
564:
552:
546:
533:
527:
511:
505:
496:
490:
489:
487:
486:
475:
466:
454:
448:
439:
433:
432:
430:
429:
418:
409:
408:
401:
175:
141:memory addresses
21:
867:
866:
862:
861:
860:
858:
857:
856:
822:
821:
802:
797:
780:
768:
755:
754:
750:
713:
709:
700:
698:
697:. Queue.acm.org
693:
692:
688:
681:, moderated by
672:
668:
654:
653:
649:
634:
633:
629:
624:. 20 July 2012.
620:
619:
615:
606:
605:
601:
596:
592:
583:
579:
571:
567:
562:Wayback Machine
553:
549:
534:
530:
512:
508:
497:
493:
484:
482:
477:
476:
469:
455:
451:
440:
436:
427:
425:
420:
419:
412:
403:
402:
398:
394:
386:Memory debugger
371:
362:
324:
274:self-similarity
247:Bohr atom model
239:
223:alpha particles
204:race conditions
171:
121:
70:observer effect
60:on the name of
42:
35:
28:
23:
22:
15:
12:
11:
5:
865:
863:
855:
854:
849:
844:
839:
834:
824:
823:
820:
819:
813:
808:
801:
800:External links
798:
796:
795:
766:
748:
707:
686:
666:
647:
627:
613:
599:
590:
577:
565:
547:
528:
506:
491:
467:
449:
434:
410:
395:
393:
390:
389:
388:
383:
377:
370:
367:
361:
358:
323:
320:
238:
235:
156:floating-point
120:
117:
26:
24:
14:
13:
10:
9:
6:
4:
3:
2:
864:
853:
850:
848:
845:
843:
840:
838:
835:
833:
832:Software bugs
830:
829:
827:
817:
814:
812:
809:
807:
804:
803:
799:
791:
785:
777:
773:
769:
763:
759:
752:
749:
745:
741:
739:
735:
731:
725:
720:
716:
711:
708:
696:
690:
687:
684:
680:
676:
670:
667:
662:
658:
651:
648:
643:
642:
637:
631:
628:
623:
617:
614:
609:
603:
600:
594:
591:
587:
581:
578:
575:
569:
566:
563:
559:
556:
551:
548:
544:
543:IEEE Computer
540:
539:
532:
529:
525:
521:
517:
510:
507:
503:
502:
495:
492:
480:
474:
472:
468:
464:
463:
458:
453:
450:
446:
445:
438:
435:
423:
417:
415:
411:
406:
400:
397:
391:
387:
384:
381:
380:Jinx Debugger
378:
376:
373:
372:
368:
366:
359:
357:
355:
350:
348:
344:
339:
337:
333:
329:
321:
319:
316:
312:
307:
305:
301:
296:
294:
290:
287:(named after
286:
282:
277:
275:
271:
267:
263:
259:
256:(named after
255:
250:
248:
244:
237:Related terms
236:
234:
232:
228:
224:
220:
216:
212:
207:
205:
199:
195:
193:
189:
185:
182:
177:
174:
169:
165:
161:
157:
153:
149:
144:
142:
138:
134:
130:
126:
118:
116:
114:
113:related terms
110:
109:
104:
103:
98:
97:
92:
91:
85:
83:
79:
75:
71:
67:
63:
59:
55:
51:
47:
40:
33:
19:
757:
751:
743:
733:
729:
727:
723:
714:
710:
699:. Retrieved
689:
669:
660:
650:
639:
630:
616:
608:"Hinden Bug"
602:
593:
585:
580:
568:
550:
542:
537:
531:
523:
519:
509:
500:
494:
483:. Retrieved
461:
452:
443:
437:
426:. Retrieved
399:
363:
351:
340:
334:news group)
325:
311:higgs-bugson
310:
308:
299:
297:
285:schroedinbug
284:
280:
278:
253:
251:
242:
240:
208:
200:
196:
178:
145:
122:
107:
106:
101:
100:
95:
94:
89:
88:
86:
78:probe effect
54:software bug
49:
43:
32:Fedora Linux
315:Higgs boson
281:schrödinbug
227:cosmic rays
192:source code
188:breakpoints
108:schrödinbug
826:Categories
767:0387276017
701:2013-09-05
572:CATB.org,
485:2013-09-05
481:. Catb.org
428:2013-09-05
424:. Catb.org
392:References
360:Resolution
336:comp.risks
219:soft error
160:assertions
135:it with a
82:test probe
48:jargon, a
39:Heisenberg
837:Debugging
784:cite book
776:225378026
347:ACM Queue
322:Etymology
300:hindenbug
254:mandelbug
152:registers
102:hindenbug
96:mandelbug
66:physicist
50:heisenbug
558:Archived
369:See also
328:Jim Gray
291:and his
268:or even
148:compiler
137:debugger
119:Examples
266:chaotic
262:fractal
243:bohrbug
221:due to
184:pointer
181:invalid
176:macro.
133:running
125:program
90:bohrbug
774:
764:
332:Usenet
173:NDEBUG
105:, and
64:, the
732:, in
52:is a
790:link
772:OCLC
762:ISBN
166:and
354:ACM
343:IBM
283:or
260:'s
225:or
168:C++
131:or
72:of
58:pun
44:In
828::
786:}}
782:{{
770:.
740::
721::
659:.
638:.
541:,
522:,
518:;
470:^
459:,
413:^
338:.
309:A
298:A
279:A
252:A
241:A
233:.
99:,
93:,
792:)
778:.
704:.
644:.
610:.
488:.
431:.
407:.
164:C
41:.
34:.
20:)
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.