
بحث بر سر حذف قابلیت اشکالزدایی KGDB از هسته لینوکس (Linux Kernel) جدی شده است. KGDB نخستین بار در نسخه 2.6.26 هسته لینوکس و در سال ۲۰۰۸ به هسته اضافه شد تا تجربه اشکالزدایی هسته را بهبود دهد. این قابلیت با GNU Debugger (GDB) همکاری میکند و اشکالزدایی هسته را شبیه به اشکالزدایی فضای کاربر (User Space) انجام میدهد.
KGDB چگونه کار میکند و چرا کنار گذاشته میشود؟
KGDB برای کار به یک رایانه دوم نیاز دارد که از طریق کابل سریال یا شبکه متصل میشود. با این حال، در سالهای اخیر استفاده از آن گسترده نبوده است. پیتر زیجلسترا (Peter Zijlstra)، توسعهدهنده باسابقه لینوکس در اینتل، پچی (Patch) را منتشر کرده که KGDB را از هسته حذف میکند. او استدلال میکند که KGDB کارهای نامناسبی انجام میدهد و با فراگیر شدن دسترسی به مجازیسازی (Virtualization)، دلیلی برای استفاده از آن به جای gdb-server در QEMU وجود ندارد.
جایگزین پیشنهادی: اشکالزدایی در ماشین مجازی
به گفته زیجلسترا، اشکالزدایی از طریق ماشینهای مجازی (VM) با gdb-server در QEMU رویکردی تمیزتر از استفاده از کابل null modem و رایانه دوم است. پچ پیشنهادی، پشتیبانی KGDB را بهطور کامل از هسته حذف میکند.
مشکلات فنی KGDB از نگاه توسعهدهنده اینتل
او در پاسخ به پرسشهایی درباره وابستگی اشکالزدایی به سختافزار خاص توضیح میدهد که میتوان از device pass-through، شبیهسازی (Emulation) یا اشکالزدایی با printk() استفاده کرد. به گفته او، استفاده از KGDB میتواند مشکلات متعددی ایجاد کند:
- تقریباً در بافت NMI (NMI Context) گیر میکند و میتواند کد نگهداری زمان (Timekeeping Code) را بهطور جدی مختل کند.
- میتواند باعث فعال شدن واچداگها (Watchdogs) شود.
- با کد پچینگ (Code Patching) و نقاط توقف (Breakpoints) دردسرهای بیپایانی ایجاد میکند.
زیجلسترا میگوید تلاشهایی برای اصلاح کد نقاط توقف در مواجهه با KGDB انجام شده، اما همه آنها نامناسب و ارزش ادامه دادن ندارند. او حذف KGDB را منطقیترین گزینه میداند و اشاره میکند که خودش حدود ۲۰ سال پیش یک بار آن را آزمایش کرده و دیگر سراغش نرفته است.
گزینه پیش رو: غیرفعالسازی تدریجی یا حذف کامل
پیشنهاد شده است که KGDB ابتدا از طریق گزینههای Kconfig غیرفعال شود و چند نسخه بعد از هسته حذف گردد. هنوز تصمیم نهایی گرفته نشده، اما جنبشی برای غیرفعالسازی و حذف پشتیبانی KGDB از هسته لینوکس شکل گرفته است.