NDK شامل یک اسکریپت پوسته به نام ndk-gdb
برای شروع یک جلسه اشکال زدایی بومی خط فرمان است. کاربرانی که ترجیح می دهند از رابط کاربری گرافیکی استفاده کنند، باید به جای آن، مستندات مربوط به اشکال زدایی را در Android Studio مطالعه کنند.
الزامات
برای اینکه اشکال زدایی بومی خط فرمان کار کند، این الزامات باید برآورده شوند:
- برنامه خود را با استفاده از اسکریپت
ndk-build
بسازید. اسکریپتndk-gdb
از استفاده از روش قدیمیmake APP=<name>
برای ساخت پشتیبانی نمی کند. - اشکال زدایی برنامه را در فایل
AndroidManifest.xml
خود با اضافه کردن عنصر<application>
که ویژگیandroid:debuggable
رویtrue
تنظیم می کند، فعال کنید. - برنامه خود را طوری بسازید که روی Android 2.2 (Android API سطح 8) یا بالاتر اجرا شود.
- اشکال زدایی در دستگاه یا شبیه ساز دارای Android نسخه 2.2 یا بالاتر. برای اهداف اشکالزدایی، سطح API هدفی که در فایل
AndroidManifest.xml
خود اعلام میکنید اهمیتی ندارد. - برنامه خود را در پوسته یونیکس توسعه دهید. در ویندوز، از Cygwin یا پیاده سازی آزمایشی Python
ndk-gdb-py
استفاده کنید. - از GNU Make 3.81 یا بالاتر استفاده کنید.
استفاده
برای فراخوانی اسکریپت ndk-gdb
، به دایرکتوری برنامه یا هر دایرکتوری زیر آن تغییر دهید. به عنوان مثال:
cd $PROJECT $NDK/ndk-gdb
در اینجا، $PROJECT
به دایرکتوری ریشه پروژه شما، و $NDK
به مسیر نصب NDK شما اشاره می کند.
وقتی ndk-gdb
را فراخوانی میکنید، جلسه را برای جستجوی فایلهای منبع و نسخههای نماد/اشکالزدایی کتابخانههای بومی ایجاد شده شما پیکربندی میکند. پس از پیوستن موفقیت آمیز به فرآیند برنامه شما، ndk-gdb
مجموعه ای طولانی از پیام های خطا را خروجی می دهد، و خاطرنشان می کند که نمی تواند کتابخانه های مختلف سیستم را پیدا کند. این طبیعی است، زیرا دستگاه میزبان شما دارای نسخههای نماد/اشکالزدایی این کتابخانهها در دستگاه مورد نظر شما نیست. می توانید با خیال راحت این پیام ها را نادیده بگیرید.
بعد، ndk-gdb
یک اعلان GDB معمولی را نمایش می دهد.
شما با ndk-gdb
مانند GNU GDB تعامل دارید. برای مثال، میتوانید از b <location>
برای تنظیم نقاط شکست و c
(برای «ادامه») برای از سرگیری اجرا استفاده کنید. برای یک لیست جامع از دستورات، راهنمای GDB را ببینید. اگر ترجیح می دهید از LLDB Debugger استفاده کنید، هنگام فراخوانی اسکریپت ndk-gdb
از گزینه --lldb
استفاده کنید.
توجه داشته باشید که وقتی از اعلان GDB خارج میشوید، فرآیند برنامهای که در حال رفع اشکال هستید متوقف میشود. این رفتار یک محدودیت gdb است.
ndk-gdb
بسیاری از شرایط خطا را کنترل می کند و در صورت یافتن مشکل، پیام خطای اطلاع رسانی را نمایش می دهد. این بررسی ها شامل اطمینان از برآورده شدن شرایط زیر است:
- بررسی می کند که ADB در مسیر شما قرار دارد.
- بررسی می کند که برنامه شما در مانیفست آن قابل اشکال زدایی اعلام شده باشد.
- بررسی می کند که در دستگاه، برنامه نصب شده با همان نام بسته نیز قابل اشکال زدایی باشد.
بهطور پیشفرض، ndk-gdb
یک فرآیند برنامهای که قبلاً در حال اجرا است را جستجو میکند و اگر خطا را پیدا نکرد، خطا را نشان میدهد. با این حال، می توانید از گزینه --start
یا --launch=<name>
برای شروع خودکار فعالیت خود قبل از جلسه اشکال زدایی استفاده کنید. برای اطلاعات بیشتر، گزینهها را ببینید.
گزینه ها
برای مشاهده لیست کامل گزینه ها، ndk-gdb --help
را در خط فرمان تایپ کنید. جدول 1 تعدادی از موارد پرکاربرد را به همراه توضیحات مختصر نشان می دهد.
گزینه | توضیحات> |
---|---|
--lldb | اگر تنظیم شود، اسکریپت به جای gdb از اشکالزدای LLDB برای جلسه استفاده میکند. |
--verbose | این گزینه به سیستم بیلد میگوید که اطلاعات کامل درباره تنظیمات جلسه اشکال زدایی بومی را چاپ کند. فقط برای مشکلات اشکال زدایی زمانی که دیباگر نمی تواند به برنامه متصل شود و پیام های خطایی که |
--force | بهطور پیشفرض، ndk-gdb در صورتی که متوجه شود که جلسه اشکالزدایی بومی دیگری در همان دستگاه در حال اجرا است، سقط میشود. این گزینه جلسه دیگر را می کشد و یک جلسه جدید جایگزین می کند. توجه داشته باشید که این گزینه برنامه واقعی در حال اشکال زدایی را از بین نمی برد، که باید آن را جداگانه بکشید. |
--start | وقتی |
--launch=<name> | این گزینه مشابه |
--launch-list | این گزینه راحتی فهرستی از نامهای فعالیت قابل راهاندازی موجود در مانیفست برنامه شما را چاپ میکند. |
--project=<path> | این گزینه دایرکتوری پروژه برنامه را مشخص می کند. اگر می خواهید اسکریپت را بدون نیاز به تغییر به دایرکتوری پروژه راه اندازی کنید مفید است. |
--port=<port> | به طور پیش فرض، |
--adb=<file> | این گزینه ابزار اجرایی adb را مشخص می کند. تنها زمانی لازم است که مسیر خود را برای گنجاندن آن فایل اجرایی تنظیم نکرده باشید. |
-d -e -s <serial> | این پرچم ها مشابه دستورات adb با نام های مشابه هستند. اگر چندین دستگاه یا شبیه ساز به دستگاه میزبان خود متصل هستید، این پرچم ها را تنظیم کنید. معانی آنها به شرح زیر است:
همچنین، میتوانید متغیر محیطی |
--exec=<file> -x <file> | این گزینه به |
--nowait | توقف موقت کد جاوا را تا زمان اتصال GDB غیرفعال کنید. عبور از این گزینه ممکن است باعث شود که دیباگر نقاط شکست اولیه را از دست بدهد. |
--tui -t | اگر رابط کاربری متنی موجود است، آن را فعال کنید. |
--gnumake-flag=<flag> | این گزینه یک پرچم (یا پرچم) اضافی برای ارسال به سیستم |
توجه: سه گزینه نهایی در این جدول فقط برای نسخه پایتون ndk-gdb
است.
پشتیبانی از موضوع
اگر برنامه شما روی پلتفرمی قدیمیتر از Android 2.3 (سطح API 9) اجرا میشود، ndk-gdb
نمیتواند رشتههای بومی را به درستی اشکالزدایی کند. دیباگر فقط می تواند رشته اصلی را اشکال زدایی کند و اجرای رشته های دیگر را کاملا نادیده می گیرد.
اگر نقطه انفصال را روی یک تابع اجرا شده در یک رشته غیر اصلی قرار دهید، برنامه خارج می شود و GDB پیام زیر را نمایش می دهد:
Program terminated with signal SIGTRAP, Trace/breakpoint trap. The program no longer exists.