Knowledge

Heisenbug

Source đź“ť

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: 778: 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: 199: 307:
obvious in the code (mathematically proven), but which cannot be seen in execution (yet difficult or impossible to actually find in existence).
840: 835: 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. 342: 449: 148: 754: 172: 316: 65:, which states that the act of observing a system inevitably alters its state. In electronics, the traditional term is 663: 488: 830: 58: 733:
This the Heisenberg Uncertainty Principle as applied to Debugging, sometimes called the "Heisenbug" Principle .
431: 152: 183:(such as property accessors) to be executed stealthily, which can, in turn, change the state of the program. 281: 128:, usually have the side-effect of altering the behavior of the program in subtle ways, such as changing the 804: 820: 363: 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
121: 277: 258: 246: 219: 34: 292: 825: 772: 645: 140: 543: 175:(which may point to a different place when debugging). Debuggers also commonly allow the use of 104:) have been occasionally proposed for other kinds of unusual software bugs, sometimes in jest. 760: 750: 504: 62: 50: 723:
Proceedings of the IEEE 5th International Conference on Distributed Computing Systems (ICDCS)
671: 629: 445: 169: 113: 562: 45:
that seems to disappear or alter its behavior when one attempts to study it. The term is a
550: 374: 262: 235: 610: 250: 211: 192: 144: 129: 467: 253:) is a bug whose causes are so complex it defies repair, or makes its behavior appear 814: 368: 254: 117: 66: 42: 20: 625:"20 Hilarious Programming Jargon Phrases You Should Use When Talking to Engineers" 794: 747:
Reliable distributed systems : technologies, Web services, and applications
303: 203: 180: 799: 410: 393: 684:""A Conversation with Bruce Lindsay", ACM Queue vol. 2, no. 8 - November 2004" 324: 215: 207: 176: 143:
are often pushed to main memory. This may affect, for instance, the result of
70: 27: 764: 683: 335: 54: 371:—a tool that automatically explores executions likely to expose Heisenbugs 338:
interview that he was present when the Heisenbug was originally defined.
261:. The term also refers to a bug that exhibits fractal behavior (that is, 161: 136: 125: 238:, they do not change their behavior and are relatively easily detected. 320: 234:, by way of contrast, is a "good, solid bug". Like the deterministic 725:, IEEE Computer Society, Computer Society Press, 1985, pp. 515-522 596: 156: 202:. Frustrated programmers may humorously blame a heisenbug on the 544:"Java toString() override with initialization as a side effect" 331: 218:
affecting the hardware, a well-documented phenomenon known as
46: 206:, or (if it has occurred only once) may explain it away as a 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
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
16:Software bug that seems to change when debugging 731: 719:Event-Driven Monitoring of Distributed Programs 711: 132:of variables and the timing of its execution. 706:, Association for Computing Machinery, 1983, 198:Heisenbugs can be viewed as instances of the 8: 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: 385: 295:) is a bug with catastrophic behavior. 770: 7: 515:, Vol. 27, No. 7, pp. 425–438, 2005. 795:The Heisenberg Debugging Technology 805:OpenOffice won't print on Tuesdays 101: 73:to a device changes its behavior. 14: 468:"The Jargon File: Schroedinbug" 330:Bruce Lindsay, a researcher at 451:The Ghost from the Grand Banks 1: 841:Software engineering folklore 836:Computer programming folklore 315:The term was used in 1985 by 745:P., Birman, Kenneth (2005). 411:"The Jargon File: Mandelbug" 394:"The Jargon File: heisenbug" 490:The New Hacker's Dictionary 433:The New Hacker's Dictionary 345:publications is from 1983. 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 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: 769: 757: 744: 743: 739: 702: 698: 689: 687: 686:. Queue.acm.org 682: 681: 677: 670:, moderated by 661: 657: 643: 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: 852: 844: 843: 838: 833: 828: 823: 813: 812: 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: 13: 10: 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: 788: 780: 774: 766: 762: 758: 752: 748: 741: 738: 734: 730: 728: 724: 720: 714: 709: 705: 700: 697: 685: 679: 676: 673: 669: 665: 659: 656: 651: 647: 640: 637: 632: 631: 626: 620: 617: 612: 606: 603: 598: 592: 589: 583: 580: 576: 570: 567: 564: 558: 555: 552: 548: 545: 540: 537: 533: 532:IEEE Computer 529: 528: 521: 518: 514: 510: 506: 499: 496: 492: 491: 484: 481: 469: 463: 461: 457: 453: 452: 447: 442: 439: 435: 434: 427: 424: 412: 406: 404: 400: 395: 389: 386: 380: 376: 373: 370: 369:Jinx Debugger 367: 365: 362: 361: 357: 355: 348: 346: 344: 339: 337: 333: 328: 326: 322: 318: 310: 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 225: 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: 107: 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:.

Index

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
observer effect in information technology

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

↑