Гейзенбаг
Материал из Википедии — свободной энциклопедии
Гейзенбаг (англ. Heisenbug) — термин, используемый в программировании для описания программной ошибки, которая исчезает или меняет свои свойства при попытке её обнаружения. Это слово, в отличие от слова «баг», в русском языке практически не используется.
Примером могут являться ошибки, которые проявляются в окончательном варианте программы (релизе), однако не видны в режиме отладки, или ошибки синхронизации в многопоточном приложении.
Содержание |
[править] Происхождение названия
Данное название является игрой слов и происходит от физического термина «Принцип неопределённости Гейзенберга», который на бытовом уровне понимается как изменение наблюдаемого объекта в результате самого факта наблюдения, происходящее в квантовой механике.
В интервью журналу ACM Queue (номер 8 за ноябрь 2004) Брюс Линдсей рассказывает, что присутствовал в тот момент, когда данный термин был впервые употреблён в значении «ты смотришь на него — и он исчезает» (сравните со словами Гейзенберга, который говорил «чем более пристально вы глядите на один предмет, тем меньше внимания вы уделяете чему-то ещё»).
[править] Возможные причины возникновения
Как правило, это низкоуровневые проблемы:
- Неинициализированная переменная — переменной не присвоено значение, но в отладчике она попадает на область памяти, заполненную нулями, а в реальной работе в памяти по тому же адресу находится произвольное значение.
- Неправильный порядок инициализации — инициализация может происходить на более поздней стадии работы, чем первое использование, при этом после инициализации проблема не проявляется (при этом на стадии отладки порядок инициализации совпадает с порядком использования).
- Ошибка синхронизации в многопоточном приложении (т. н. race condition) — всевозможные ошибки от неправильной установки семафоров, до ошибок, связанных с взаимными приоритетами работы потоков (приоритеты при отладке и в реальной работе могут отличаться).
[править] См. также
- Борбаг (Bohr bug)
- Мандельбаг (Mandelbug)
- Шрёдинбаг (Schroedinbug)
[править] Ссылки
- Интервью Брюса Линдсея (русский перевод)