برای تولید گزارش ردیابی روشها از اجرای برنامهتان، میتوانید برنامهتان را بااستفاده از کلاس Debug ابزارسازی کنید. ابزارسازی برنامهتان به این روش به شما کنترل بیشتری بر زمان دقیق شروع و توقف ضبط اطلاعات ردیابی توسط دستگاه میدهد. دستگاه همچنین گزارشهای ردیابی را بااستفاده از نامهایی که مشخص میکنید ذخیره میکند تا بتوانید بهراحتی هر گزارش را بعداً شناسایی کنید. سپس میتوانید هر گزارش ردیابی را بااستفاده از
تحلیلگر واحد پردازش مرکزی Android Studio مشاهده کنید.
همچنین میتوانید بدون ابزاربندی کد برنامهتان، ردگیری را در «تحلیلگر واحد پردازش مرکزی» شروع و متوقف کنید.
قبلاز شروع تولید گزارشهای ردیابی، مطمئن شوید که برنامهتان منطق لازم را برای ذخیره کردن گزارشهای ردیابی در دایرکتوری مختص برنامه خود اضافه کرده باشد.
برنامهتان را ابزاربندی کنید
برای ایجاد گزارشهای ردیابی، startMethodTracing() را در جایی که میخواهید سیستم شروع به ثبت دادههای ردیابی کند فراخوانی کنید.
در تماس، میتوانید نام فایل .trace را مشخص کنید و سیستم آن را در دایرکتوری مخصوص بسته ذخیره میکند که برای دادههای برنامه پایدار در دستگاه هدف درنظر گرفته شده است—این همان دایرکتوری است که توسط getExternalFilesDir() برگردانده میشود و در اکثر دستگاهها در دایرکتوری ~/sdcard/ قرار دارد.
این فایل حاوی دادههای گزارش ردیابی روشهای دودویی و جدول نگاشت با نامهای رشته و روش است. برای توقف ردیابی، با
stopMethodTracing() تماس بگیرید.
نمونه زیر ضبط گزارش ردیابی با نام
sample.trace را شروع و متوقف میکند:
کاتلین
// Starts recording a trace log with the name you provide. For example, the // following code tells the system to start recording a .trace file to the // device with the name "sample.trace". Debug.startMethodTracing("sample") // The system begins buffering the generated trace data, until your // application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes // the buffered data to the output file. Debug.stopMethodTracing()
جاوا
// Starts recording a trace log with the name you provide. For example, the // following code tells the system to start recording a .trace file to the // device with the name "sample.trace". Debug.startMethodTracing("sample"); ... // The system begins buffering the generated trace data, until your // application calls <code><a href="/reference/android/os/Debug.html#stopMethodTracing()">stopMethodTracing()</a></code>, at which time it writes // the buffered data to the output file. Debug.stopMethodTracing();
توجه داشته باشید که اگر برنامهتان دوباره
startMethodTracing()
را بدون تغییر دادن نام گزارش ردیابی فراخوانی کند، گزارش موجود
ذخیرهشده در دستگاه را رونویسی میکند. برای آشنایی با نحوه تغییر پویای نام هر گزارش ردیابی، به بخش مربوط به ذخیره کردن چند گزارش بروید.
اگر سیستم قبلاز اینکه
stopMethodTracing() را فراخوانی کنید به حداکثر اندازه میانگیر برسد،
سیستم ردیابی را متوقف میکند و اعلانی به کنسول ارسال میکند.
روشهایی که ردیابیها را شروع و متوقف میکنند در کل فرایند برنامه شما کار میکنند. یعنی میتوانید
startMethodTracing()
را در روش
onCreate(Bundle)
فعالیتتان فراخوانی کنید و stopMethodTracing()
را در روش onDestroy()
آن فعالیت فراخوانی کنید.
توجه داشته باشید که وقتی نمایهسازی فعال باشد، برنامهتان کندتر اجرا میشود. یعنی نباید از دادههای نمایهسازی برای تعیین زمانبندی مطلق استفاده کنید (مثلاً «اجرای روش foo() ۲٫۵ ثانیه طول میکشد»). اطلاعات زمانبندی در گزارشهای ردیابی فقط زمانی مفید است که آن را با گزارشهای ردیابی قبلی مقایسه کنید تا بتوانید ببینید آیا تغییرات اخیر باعث سریعتر یا کندتر شدن برنامهتان میشود یا نه.
هنگام استقرار در دستگاههای دارای Android 5.0 (سطح میانای برنامهسازی کاربردی ۲۱) و بالاتر، میتوانید
از نمایهسازی مبتنی بر نمونه برای نمایهسازی با تأثیر کمتر بر عملکرد زمان اجرا استفاده کنید. برای
فعال کردن تحلیل نمونه،
startMethodTracingSampling()
را (بهجای فراخوانی startMethodTracing()) با فاصله نمونهگیری
مشخص فراخوانی کنید. سیستم بهطور دورهای نمونهها را جمعآوری میکند تا زمانی که برنامهتان
stopMethodTracing() را فراخوانی کند.
ذخیره کردن چند گزارش
اگر برنامهتان ردیابی روش را چندین بار بدون مشخص کردن نام جدیدی برای گزارش ردیابی شروع و متوقف کند، دستگاه گزارش ردیابی قدیمیتر را با گزارش جدید رونویسی میکند، یعنی فقط جدیدترین گزارش ردیابی را نگه میدارد. برای ذخیره کردن چند گزارش ردیابی در دستگاهتان، هربار که برنامهتان startMethodTracing() را فراخوانی میکند، نام گزارش ردیابی را بهطور پویا تغییر دهید.
نمونه زیر از کلاس SimpleDateFormat
استفاده میکند تا تاریخ و زمان فعلی را هنگام نامگذاری هر گزارش ردیابی لحاظ کند:
کاتلین
// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with // the current date and time. val dateFormat: DateFormat = SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault()) val logDate: String = dateFormat.format(Date()) // Applies the date and time to the name of the trace log. Debug.startMethodTracing("sample-$logDate")
جاوا
// Uses the <code><a href="/reference/java/text/SimpleDateFormat.html">SimpleDateFormat</a></code> class to create a String with // the current date and time. SimpleDateFormat dateFormat = new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss", Locale.getDefault()); String logDate = dateFormat.format(new Date()); // Applies the date and time to the name of the trace log. Debug.startMethodTracing( "sample-" + logDate);
دسترسی به گزارشهای ردیابی در دستگاه
پساز اینکه سیستم گزارش ردیابی را در دستگاهتان ایجاد کرد، میتوانید به یکی از روشهای زیر به فایل دسترسی پیدا کنید:
از «کاوشگر دستگاه» استفاده کنید. برای باز کردن «کاوشگر دستگاه»، روی مشاهده > پنجرههای ابزار > کاوشگر دستگاه کلیک کنید (یا روی دکمه کاوشگر دستگاه
در نوار پنجره ابزار کلیک کنید). همانطور که در شکل ۱ نشان داده شده است،
میتوانید فایلهای .traceرا با پیمایش به فهرست راهنمای ویژه بسته برنامهتان پیدا کنید.
شکل ۱. مکانیابی گزارشهای ردیابی بااستفاده از «کاوشگر دستگاه».
بااستفاده از فرمان
adb pull، فایل را در ماشین محلیتان کپی کنید. فرمان زیر گزارش ردیابیای بهنامsample.traceرا از دستگاه به فهرست راهنمای~/Documents/trace-logs/در دستگاه محلی شما کپی میکند.adb pull path-on-device/sample.trace ~/Documents/trace-logs/
سپس میتوانید فایل ردیابی را با «تحلیلگر واحد پردازش مرکزی» وارد کنید.