فرمان‌های اشکال‌زدایی برای نمایه‌سازی محلی

هنگام آزمایش ادغام ProfilingManager به‌صورت محلی، ممکن است درخواست‌ها توسط محدودیت نرخ کاهش یابند یا ردیابی‌های پس‌زمینه هنگام آزمایش راه‌اندازها فعال نباشند. از فرمان‌های adb در این صفحه برای غیرفعال کردن محدودسازی، کشیدن نمایه‌ها، حفظ ردپاهای ویرایش‌نشده، راه‌اندازی ضبط، و بازرسی وضعیت سرویس در دستگاه آزمایشی استفاده کنید.

غیرفعال کردن محدودکننده نرخ

برای غیرفعال کردن فرایند برنامه و محدودکننده‌های نرخ سیستم برای درخواست‌های requestProfiling درطول آزمایش محلی، فرمان device_config زیر را اجرا کنید:

adb shell device_config put profiling_testing rate_limiter.disabled true

وقتی آزمایش تمام شد، پرچم را بازنشانی کنید:

adb shell device_config delete profiling_testing rate_limiter.disabled

کشیدن نمایه‌ها بااستفاده از ADB

برای بازرسی نمایه پنهان‌شده به‌صورت محلی در دستگاهی با دسترسی ریشه، adb pull را با مسیر برگردانده‌شده توسط getResultFilePath اجرا کنید:

# Pull a profile
adb pull /data/user/0/<com.example.myapp>/files/profiling/<profile-file-name>

حفظ نتایج موقت و ویرایش‌نشده

هنگام آزمایش نمایه‌سازی به‌صورت محلی، می‌توانید نتایج را در دایرکتوری موقت در /data/misc/perfetto-traces/profiling/ نگه دارید. مقایسه ردگیری سیستم ویرایش‌نشده با همتای ویرایش‌شده آن به شما کمک می‌کند بفهمید چه داده‌هایی درطول ویرایش حذف می‌شوند.

نحوه نگهداری نتایج موقت و ویرایش‌نشده به نسخه Android مورداستفاده در دستگاهتان بستگی دارد:

  • Android 16 (سطح API‏ ۳۶) و بالاتر: می‌توانید هم نتایج ویرایش‌نشده (درصورت وجود) و هم نتایج ویرایش‌شده را در دایرکتوری موقت نگه دارید. این دایرکتوری در Android 16 گسترش یافته است تا بااستفاده از adb pull در همه انواع ساخت بدون دسترسی ریشه‌ای قابل‌دسترسی باشد (درحالی‌که Android 15 برای خواندن /data/misc/perfetto-traces/profiling/ به دسترسی ریشه‌ای نیاز دارد). برای جلوگیری از حذف نتایج موقت توسط سیستم، فرمان زیر را اجرا کنید:

    adb shell device_config put profiling_testing delete_temporary_results.disabled true
    
  • Android 15 (سطح میانای برنامه‌سازی کاربردی ۳۵): در دایرکتوری موقت، فقط می‌توانید نتیجه ویرایش‌نشده را حفظ کنید که ازطریق adb فقط در نسخه‌های ساخت با دسترسی ریشه قابل‌دسترسی است. (برنامه شما همچنان نمایه ویرایش‌شده را در دایرکتوری /data/user/0/<app>/files/profiling/ خودش دریافت می‌کند که کد برنامه شما می‌تواند آن را در هر ساخت بخواند یا کپی کند، هرچند استخراج مستقیم از /data/user/0/... با adb pull به دسترسی ریشه‌ای نیاز دارد، یا adb shell run-as <app> در ساخت قابل‌اشکال‌زدایی.) برای جلوگیری از حذف ردهای ویرایش‌نشده توسط سیستم، فرمان زیر را اجرا کنید:

    adb shell device_config put profiling_testing delete_unredacted_trace.disabled true
    

پس‌از ضبط نمایه، فایل حفظ‌شده را از دایرکتوری موقت بیرون بکشید:

# Pull a retained redacted profile (Android 16 and higher)
adb pull /data/misc/perfetto-traces/profiling/<trace-name>.<profile-type-ext>

# Pull an unredacted system trace
adb pull /data/misc/perfetto-traces/profiling/<trace-name>.perfetto-trace-unredacted

در این فرمان‌ها، <trace-name> نام فایل پایه (بدون افزونه) از مسیر برگردانده‌شده توسط ProfilingResult.getResultFilePath است، و نسخه ردنشده ردیابی سیستم -unredacted را به افزونه .perfetto-trace اضافه می‌کند. برای جزئیات مربوط به ساختار نام فایل و مقادیر <profile-type-ext>، به مکان‌های فایل و قالب‌های نام‌گذاری مراجعه کنید.

adb shell device_config delete profiling_testing delete_temporary_results.disabled
adb shell device_config delete profiling_testing delete_unredacted_trace.disabled

فعال‌سازی اجباری ردیابی‌های پس‌زمینه برای آزمایش راه‌انداز

چون ردگیری‌های پس‌زمینه سیستم در فواصل زمانی تصادفی در تولید اجرا می‌شوند، آزمایش کردن نمایه‌سازی مبتنی بر راه‌انداز به‌صورت محلی می‌تواند دشوار باشد. برای اینکه سیستم را مجبور کنید ردیابی پس‌زمینه پیوسته را اجرا کند و محدودکننده نرخ سطح سیستم را برای راه‌اندازهای برنامه‌تان دور بزند، system_triggered_profiling.testing_package_name را تنظیم کنید:

adb shell device_config put profiling_testing system_triggered_profiling.testing_package_name <com.example.myapp>

هرگونه زمان استراحت برای هر راه‌انداز که با setRateLimitingPeriodHours پیکربندی شده باشد همچنان اعمال می‌شود. چون این حالت به‌طور مداوم اجرا می‌شود تا زمانی که آن را پاک کنید، پرچم را پس‌از اتمام آزمایش بردارید:

adb shell device_config delete profiling_testing system_triggered_profiling.testing_package_name

فرمان‌های مفید اشکال‌زدایی

در Android 16 (سطح میانای برنامه‌سازی کاربردی ۳۶) و بالاتر با نسخه اخیر ماژول Profiling، می‌توانید از ابزار cmd profiling_service روی adb برای فعال کردن ثبت گزارش پرجزئیات، راه‌اندازی مجموعه‌های نمایه درخواستی، و راه‌اندازی‌های آزمایشی مستقیماً از خط فرمان استفاده کنید.

فعال کردن گزارش‌گیری مفصل اشکال‌زدایی

برای فعال کردن گزارش‌های دقیق ProfilingService در logcat و تشخیص درخواست رسیدگی و تحویل، فرمان زیر را اجرا کنید:

adb shell cmd profiling_service enable-logs true

درخواست مجموعه نمایه درخواستی

برای شروع ضبط فوری نمایه برای بسته‌ای خاص از خط فرمان، فرمان زیر را اجرا کنید:

adb shell cmd profiling_service request-profiling <profiling_type> <com.example.myapp> [--user <user_id>] [--duration <duration_ms>] [--sources <sources>]

در این فرمان، <profiling_type> مقدار ثابت عدد صحیح از ProfilingManager است (1 برای رونوشت پشته جاوا، 2 برای نمایه پشته، 3 برای نمونه‌برداری پشته، یا 4 برای ردگیری سیستم). فرایند برنامه هدف باید برای نمایه‌های پشته و حافظه درحال اجرا باشد، درخواست مشمول محدودکننده نرخ است مگراینکه غیرفعال شده باشد، و ProfilingResult تکمیل‌شده فقط به شنوندگان سراسری ثبت‌شده با registerForAllProfilingResults تحویل داده می‌شود.

ثبت و شبیه‌سازی راه‌اندازها

برای ثبت راه‌انداز یا اجرای رویداد راه‌انداز شبیه‌سازی‌شده برای بسته و تأیید مدیریت فراخوان راه‌انداز، فرمان‌های زیر را اجرا کنید:

adb shell cmd profiling_service add-trigger <trigger_type> <com.example.myapp> [--user <user_id>]
adb shell cmd profiling_service trigger <trigger_type> <com.example.myapp> [--user <user_id>]

در این فرمان‌ها، <trigger_type> مقدار ثابت عدد صحیح از ProfilingTrigger است (برای مثال، 1 برای TRIGGER_TYPE_APP_FULLY_DRAWN، 2 برای TRIGGER_TYPE_ANR، یا 7 برای TRIGGER_TYPE_OOM). اجرای add-trigger راه‌انداز را با زمان استراحت 0 ساعته ثبت می‌کند و هرگونه ثبت موجود برای آن نوع راه‌انداز را لغو می‌کند. شبیه‌سازی راه‌اندازهایی که عکس آنی از ردگیری پس‌زمینه (مثل 1 یا 2) ذخیره می‌کنند، به ردگیری پس‌زمینه فعال نیاز دارد (به فعال‌سازی اجباری ردگیری پس‌زمینه برای آزمایش راه‌انداز مراجعه کنید).

جمع‌آوری وضعیت کلی ProfilingManager

در Android 16 (سطح میانای برنامه‌سازی کاربردی ۳۶) و نسخه‌های بالاتر با نسخه اخیر ماژول Profiling، می‌توانید dumpsys را درمقابل profiling_service اجرا کنید تا مشکلات را تشخیص دهید و وضعیت فعلی ProfilingManager را بررسی کنید:

adb shell dumpsys profiling_service

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

  • وضعیت محدودکننده‌های فعال و محدودکننده نرخ.
  • پیکربندی‌های فعال دستگاه.
  • راه‌اندازهای برنامه ثبت‌شده و زمان‌های استراحت محدودکننده نرخ آن‌ها.
  • جلسه‌های نمایه‌سازی فعال و در صف.
  • درخواست‌های نمایه‌سازی اخیر، رخدادهای راه‌انداز، و رویدادهای تحویل نتیجه.