نحوه کارکرد دیدبان
بررسی چرخه حیات گزارش خرابی از لحظه وقوع در اپلیکیشن تا نمایش در پنل توسعهدهندگان.
دیدبان بر اساس یک اصل مهندسی حیاتی بنا شده است: در زمان وقوع یک خطای مهلک در اپلیکیشن موبایل، سیستم در وضعیت شکننده قرار دارد و نباید هیچگونه عملیات پرخطر مانند ارسال درخواست شبکه یا تخصیص حافظه پویا روی هیپ (Heap) انجام شود.
مهم
ارسال کرشها در اجرای بعدی (Next Launch) انجام میشود: پس از وقوع کرش مهلک، اطلاعات فوراً و با حداکثر ایمنی روی دیسک ذخیره میشوند و برنامه بهصورت استاندارد بسته میشود. با باز شدن مجدد اپلیکیشن توسط کاربر، دیدبان فایلهای ذخیرهشده را بازیابی کرده و در پسزمینه (Background) به سرور ارسال میکند.
مراحل گامبهگام چرخه حیات
راهاندازی اولیه در زمان شروع برنامه (Initialization)
در متد Application.onCreate (در اندروید) یا ساختار اصلی App (در iOS)، کتابخانه Didban با شناسه پروژه و کلید Ingest فراخوانی میشود. در این مرحله، شنوندههای استثناهای پیشفرض سیستمعامل ثبت شده و بافرهای حافظه از پیش آماده میشوند.
وقوع خطای مهلک (Crash or Signal Occurs)
یک خطای مدیریتنشده در JVM یا سیگنال مهلک نیتیو در سطح سیستمعامل رخ میدهد. هوک اختصاصی دیدبان فعال میشود.
ذخیرهسازی پایدار محلی (Signal-Safe Persistence)
دیدبان فریمهای استک پشته، اطلاعات ترد جاری، ردپاهای متنی (Breadcrumbs) و وضعیت سیستم را در یک فایل اختصاصی در حافظه محلی برنامه (Internal App Storage) مینویسد. این عملیات بدون فراخوانی سوکتهای شبکه یا ساخت اشیاء ناپایدار انجام میشود.
واگذاری کنترل و خاتمه پروسس (Delegation & Clean Exit)
دیدبان کنترل را به شنونده پیشین سیستم واگذار میکند تا سیستمعامل رفتار طبیعی خود را انجام دهد. برنامه بههیچوجه خطا را پنهان نکرده یا آن را متوقف نمیسازد.
اجرای بعدی و ارسال خودکار (Next Launch Recovery)
هنگامی که کاربر مجدداً برنامه را باز میکند، کئوردیناتور دیدبان فایلهای ذخیرهشده را از دیسک خوانده و در یک صف غیرهمگام (Asynchronous Background Thread) از طریق HTTP به سرور دیدبان ارسال میکند.
پردازش سرور و نمایش در داشبورد (Ingestion & Investigation)
سرور دیدبان رخداد را دریافت، با اثرانگشت مشخص دستهبندی، با مپینگهای نسخه رمزگشایی کرده و در قالب ایشو در داشبورد با نمایش فریم اصلی خطا در اختیار تیم توسعه قرار میدهد.
چرا دیدبان در زمان کرش درخواست شبکه ارسال نمیکند؟
در سیستمعاملهای اندروید و iOS، هنگامی که یک نخ (Thread) متوقف میشود یا سیگنالی مانند SIGSEGV صادر میگردد:
- نخهای دیگر ممکن است قفل شده باشند یا در وضعیت نامتعادل قرار گرفته باشند.
- پشته حافظه (Stack) ممکن است خراب شده باشد، بنابراین تخصیصهای جدید ممکن است باعث خطای دوم (Double Fault) شوند.
- سیستمعامل فرآیند کرش را در صورت طولانی شدن قطع خواهد کرد، در نتیجه درخواستهای شبکه ناقص مانده و اطلاعات کرش به کلی از بین میروند.
دیدبان با تکیه بر ذخیرهسازی محلی صفر-تخصیص، حداکثر قابلیت اطمینان را برای ثبت دقیقترین جزئیات فراهم میآورد.