Гайзенбаґ

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Гайзенбаґ (англ. heisenbug) — дотепний жаргонний термін у комп'ютерному програмуванні для баґа, що зникає коли хтось намагається дослідити його.[1] Термін є каламбуром від імені Вернера Гейзенберга, фізика, який першим заявив принцип спостерігача в квантовій механіці, який стверджує, що саме спостереження за системою неминуче змінює її стан.

Приклади[ред.ред. код]

Гайзенбаґи стаються через те, що поширені варіанти зневадження програм, такі як вставлення операцій виведення або виконання у зневаджувачі, зазвичай змінюють код, змінюють адреси змінних у пам'яті і часовий перебіг виконання.

Один з поширених прикладів гайзенбаґа є баґ, який з'являється коли програма скомпільована з компілятором, що оптимізує, але тоді коли програма скомпільована без оптимізації (як це часто робиться з ціллю вивчення її за допомогою зневаджувача) все гаразд. Під час зневадження, значення які за умови оптимізації зберігались би в регістрах процесора часто виштовхуються в загальну пам'ять. Це може зачепити, наприклад, результат порівнянь чисел з рухомою комою, бо значення в пам'яті можуть мати меншу точність і діапазон ніж значення в регістрі.

Іншими поширеними причинами гайзенбаґа є використання значення неініціалізованої змінної (яка може змінювати свою адресу і/або початкове значення під час зневадження) або використання нечинного вказівника (який вказує на іншу адресу ніж за умов зневадження). Зазвичай зневаджувачі також надають можливість використання вартових (англ. watches) або інші користувацькі інтерфейси, які спричиняють появу додаткового сирцевого коду (такого як доступ до членів), який виконується крадькома і також може змінити поточний стан програми.

Фактором гайзенбаґа також може бути час, особливо в багатопотокових програмах. Виконання програми в зневаджувачі може змінити перебіг виконання порівняно з нормальним виконанням. Чутливі до часового перебігу баґи такі як стан гонитви можуть не виявляти себе коли програма уповільнена покроковим виконанням у зневаджувачі. Це особливо істинно коли програма взаємодіє з зовнішньою сутністю, яка непідконтрольна зневаджувачу, наприклад коли йдеться про обробку мережевих пакетів і під контролем зневаджувача лише одна з машин.

Примітки[ред.ред. код]

  1. «The Jargon File: heisenbug». Архів оригіналу за 2013-07-24.