نحوه کارکرد دیدبان

بررسی چرخه حیات گزارش خرابی از لحظه وقوع در اپلیکیشن تا نمایش در پنل توسعه‌دهندگان.

دیدبان بر اساس یک اصل مهندسی حیاتی بنا شده است: در زمان وقوع یک خطای مهلک در اپلیکیشن موبایل، سیستم در وضعیت شکننده قرار دارد و نباید هیچ‌گونه عملیات پرخطر مانند ارسال درخواست شبکه یا تخصیص حافظه پویا روی هیپ (Heap) انجام شود.

چرخه حیات کرش: از وقوع خطا تا بازیابی و نمایش
1
اپلیکیشن موبایلخطای مهلک یا سیگنال نیتیو رخ می‌دهد
2
ذخیره‌سازی محلی امن (دیسک)بدون ارسال شبکه و بدون تخصیص حافظه خطرناک
3
خروج طبیعی پروسسواگذاری کنترل به سیستم‌عامل بدون وقفه
4
اجرای بعدی کاربر (Next Launch)بازیابی کرش‌های ذخیره‌شده و ارسال در پس‌زمینه
5
بک‌اند دیدبانمحاسبه اثرانگشت، دسته‌بندی ایشو و نمادگذاری
6
داشبورد توسعه‌دهندهبررسی ریشه خطا، فریم اصلی و ردپای متنی
مهم

ارسال کرش‌ها در اجرای بعدی (Next Launch) انجام می‌شود: پس از وقوع کرش مهلک، اطلاعات فوراً و با حداکثر ایمنی روی دیسک ذخیره می‌شوند و برنامه به‌صورت استاندارد بسته می‌شود. با باز شدن مجدد اپلیکیشن توسط کاربر، دیدبان فایل‌های ذخیره‌شده را بازیابی کرده و در پس‌زمینه (Background) به سرور ارسال می‌کند.

مراحل گام‌به‌گام چرخه حیات

1

راه‌اندازی اولیه در زمان شروع برنامه (Initialization)

در متد Application.onCreate (در اندروید) یا ساختار اصلی App (در iOS)، کتابخانه Didban با شناسه پروژه و کلید Ingest فراخوانی می‌شود. در این مرحله، شنونده‌های استثناهای پیش‌فرض سیستم‌عامل ثبت شده و بافرهای حافظه از پیش آماده می‌شوند.

2

وقوع خطای مهلک (Crash or Signal Occurs)

یک خطای مدیریت‌نشده در JVM یا سیگنال مهلک نیتیو در سطح سیستم‌عامل رخ می‌دهد. هوک اختصاصی دیدبان فعال می‌شود.

3

ذخیره‌سازی پایدار محلی (Signal-Safe Persistence)

دیدبان فریم‌های استک پشته، اطلاعات ترد جاری، ردپاهای متنی (Breadcrumbs) و وضعیت سیستم را در یک فایل اختصاصی در حافظه محلی برنامه (Internal App Storage) می‌نویسد. این عملیات بدون فراخوانی سوکت‌های شبکه یا ساخت اشیاء ناپایدار انجام می‌شود.

4

واگذاری کنترل و خاتمه پروسس (Delegation & Clean Exit)

دیدبان کنترل را به شنونده پیشین سیستم واگذار می‌کند تا سیستم‌عامل رفتار طبیعی خود را انجام دهد. برنامه به‌هیچ‌وجه خطا را پنهان نکرده یا آن را متوقف نمی‌سازد.

5

اجرای بعدی و ارسال خودکار (Next Launch Recovery)

هنگامی که کاربر مجدداً برنامه را باز می‌کند، کئوردیناتور دیدبان فایل‌های ذخیره‌شده را از دیسک خوانده و در یک صف غیرهمگام (Asynchronous Background Thread) از طریق HTTP به سرور دیدبان ارسال می‌کند.

6

پردازش سرور و نمایش در داشبورد (Ingestion & Investigation)

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

چرا دیدبان در زمان کرش درخواست شبکه ارسال نمی‌کند؟

در سیستم‌عامل‌های اندروید و iOS، هنگامی که یک نخ (Thread) متوقف می‌شود یا سیگنالی مانند SIGSEGV صادر می‌گردد:

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

دیدبان با تکیه بر ذخیره‌سازی محلی صفر-تخصیص، حداکثر قابلیت اطمینان را برای ثبت دقیق‌ترین جزئیات فراهم می‌آورد.