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