Knowledge

Heisenbug

Source đź“ť

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:)

Index

Unusual software bug
Fedora Linux
Heisenberg
computer programming
software bug
pun
Werner Heisenberg
physicist
observer effect
quantum mechanics
probe effect
test probe
related terms
program
output statements
running
debugger
memory addresses
compiler
registers
floating-point
assertions
C
C++
NDEBUG
invalid
pointer
breakpoints
source code
race conditions

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.

↑