هایزنباگ یک اصطلاح در برنامه‌نویسی رایانه است و به یک باگ نرم‌افزاری گفته می‌شود که هنگامی که برای بررسی آن اقدام می‌شود ناپدید می‌گردد یا رفتار آن تغییر می‌کند. کلمه هایزنباگ از ترکیب نام هایزنبرگ فیزیکدان آلمانی، که اولین بار اثر مشاهده‌گر بر روی سامانه مورد بررسی را در مکانیک کوانتومی مطرح کرد، با واژهٔ باگ (نرم‌افزاری) ساخته شده‌است.

نسخه بیستم سیستم عامل فدورا هایزنباگ نامگذاری شده‌است.

مثال‌ها ویرایش

اشکالات هایزنباگ به این دلیل اتفاق می‌افتد که تلاش‌های معمول برای اشکال زدایی از یک برنامه، مانند قرار دادن دستورات خروجی یا اجرای آن با اشکال زدایی، معمولاً دارای عوارض جانبی در تغییر رفتار برنامه به شکل ظریف مانند تغییر آدرس حافظه متغیرها و زمان آن است.

یکی از نمونه‌های رایج هایزنباگ اشکالی است که هنگام کامپایل برنامه با کامپایلر بهینه‌ساز ظاهر می‌شود، اما وقتی همان برنامه بدون بهینه‌سازی کامپایل می‌شود مشکلی نیست (همان کاری که اغلب برای بررسی آن با دیباگر انجام می‌شود). هنگام اشکال زدایی، مقادیری که یک برنامه بهینه‌سازی شده معمولاً در رجیسترها نگه می‌دارد، اغلب به حافظه اصلی هدایت می‌شوند. این ممکن است به عنوان مثال، نتیجه مقایسه اعداد اعشاری را تحت تأثیر قرار دهد، زیرا ممکن است مقدار حافظه دامنه و دقت کمتری نسبت به مقدار ثبت شده داشته باشد. به همین ترتیب، هایزنباگ ممکن است ناشی از عوارض جانبی در عبارات آزمایشی باشد که در زمان اجرا در زبانهایی مانند C و C به کار رفته‌است.

از دیگر دلایل عمده بروز اشکالات هایزنباگ، استفاده از مقدار یک متغیر مقداردهی نشده (که ممکن است آدرس یا مقدار اولیه خود را در هنگام اشکال زدایی تغییر دهد)، یا دنبال کردن یک اشاره گر نامعتبر است (که ممکن است هنگام اشکال زدایی به مکان دیگری اشاره کند). اشکال زدایی همچنین معمولاً اجازه استفاده از نقاط توقف را می‌دهد یا رابط‌های کاربری دیگری را فراهم می‌کند که باعث می‌شود کد منبع اضافی (مانند دسترسی به عناصر کلاس) به‌طور مخفیانه اجرا شود، که به نوبه خود می‌تواند وضعیت برنامه را تغییر دهد.

زمان همچنین می‌تواند عاملی در اشکالات هایزنباگ باشد، به ویژه با کاربردهای چند رشته‌ای. اجرای یک برنامه تحت کنترل خطایاب می‌تواند زمان اجرای برنامه را در مقایسه با اجرای طبیعی تغییر دهد. اشکال حساس به زمان مانند شرایط مسابقه ممکن است هنگام کاهش سرعت برنامه توسط خطوط منبع تک پله ای در عیب‌یاب، رخ ندهد. این امر به ویژه هنگامی صادق است که این رفتار شامل تعامل با چیزی باشد که تحت کنترل خطایاب نیست، مانند زمانی که اشکال زدایی پردازش بسته شبکه بین دو دستگاه را انجام می‌دهد و فقط یکی تحت کنترل اشکال زدایی است.

هایزنباگ‌ها را می‌توان نمونه‌هایی از تأثیر ناظر در فناوری اطلاعات دانست. برنامه نویسان ناامید ممکن است طنزگونه مقصر یک هایزنباگ را فاز ماه بدانند، یا (اگر فقط یک بار رخ داده باشد) ممکن است آن را به عنوان یک خطای نرم به دلیل ذرات آلفا یا اشعه‌های کیهانی که بر سخت‌افزار تأثیر می‌گذارند توضیح دهند.

منابع ویرایش

  • ویکی انگلیسی