ndk-gdb

NDK شامل یک اسکریپت پوسته به نام ndk-gdb برای شروع یک جلسه اشکال زدایی بومی خط فرمان (از لحاظ تاریخی gdb اما اکنون lldb) است. کاربرانی که ترجیح می دهند از رابط کاربری گرافیکی استفاده کنند، باید به جای آن، مستندات مربوط به اشکال زدایی را در 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 اعلان معمول lldb را نمایش می دهد.

شما با ndk-gdb به همان روشی که با lldb تعامل می کنید، تعامل دارید. اگر با lldb آشنا نیستید اما gdb را می‌دانید، [نقشه دستوری GDB به LLDB] (https://lldb.llvm.org/use/map.html) مفید را ببینید.

ndk-gdb بسیاری از شرایط خطا را کنترل می کند و در صورت یافتن مشکل، پیام خطای اطلاع رسانی را نمایش می دهد. این بررسی ها شامل اطمینان از برآورده شدن شرایط زیر است:

  • بررسی می کند که ADB در مسیر شما قرار دارد.
  • بررسی می کند که برنامه شما در مانیفست آن قابل اشکال زدایی اعلام شده باشد.
  • بررسی می کند که در دستگاه، برنامه نصب شده با همان نام بسته نیز قابل اشکال زدایی باشد.

به‌طور پیش‌فرض، ndk-gdb یک فرآیند برنامه‌ای که قبلاً در حال اجرا است را جستجو می‌کند و اگر خطا را پیدا نکرد، خطا را نشان می‌دهد. با این حال، می توانید از گزینه --start یا --launch=<name> برای شروع خودکار فعالیت خود قبل از جلسه اشکال زدایی استفاده کنید. برای اطلاعات بیشتر، گزینه‌ها را ببینید.

گزینه ها

برای مشاهده لیست کامل گزینه ها، ndk-gdb --help در خط فرمان تایپ کنید. جدول 1 تعدادی از موارد پرکاربرد را به همراه توضیحات مختصر نشان می دهد.

جدول 1. گزینه های رایج ndk-gdb و توضیحات آنها.

شروع ndk-gdb با این گزینه مشخص شده، اولین فعالیت قابل راه اندازی فهرست شده در مانیفست برنامه شما را راه اندازی می کند. از --launch=<name> برای شروع فعالیت قابل راه اندازی بعدی استفاده کنید. برای حذف لیست فعالیت های قابل راه اندازی، --launch-list از خط فرمان اجرا کنید.

گزینه توضیحات>
--verbose

این گزینه به سیستم بیلد می‌گوید که اطلاعات کامل درباره تنظیمات جلسه اشکال زدایی بومی را چاپ کند. فقط برای مشکلات اشکال زدایی زمانی که دیباگر نمی تواند به برنامه متصل شود و پیام های خطایی که ndk-gdb نمایش می دهد کافی نیست.

--force به‌طور پیش‌فرض، ndk-gdb در صورتی که متوجه شود که جلسه اشکال‌زدایی بومی دیگری در همان دستگاه در حال اجرا است، سقط می‌شود. این گزینه جلسه دیگر را می کشد و یک جلسه جدید جایگزین می کند. توجه داشته باشید که این گزینه برنامه واقعی در حال اشکال زدایی را از بین نمی برد، که باید آن را جداگانه بکشید.
--start

وقتی ndk-gdb را راه‌اندازی می‌کنید، به‌طور پیش‌فرض سعی می‌کند به یک نمونه در حال اجرا موجود از برنامه شما در دستگاه مورد نظر متصل شود. شما می توانید این رفتار پیش فرض را با استفاده از --start برای راه اندازی صریح برنامه در دستگاه مورد نظر قبل از جلسه اشکال زدایی لغو کنید.

--launch=<name>

این گزینه مشابه --start است، با این تفاوت که به شما امکان می دهد یک فعالیت خاص را از برنامه خود شروع کنید. این ویژگی تنها زمانی مفید است که مانیفست شما چندین فعالیت قابل راه اندازی را تعریف کند.

--launch-list

این گزینه راحتی فهرستی از نام‌های فعالیت قابل راه‌اندازی موجود در مانیفست برنامه شما را چاپ می‌کند. --start از نام اولین فعالیت استفاده می کند.

--project=<path> این گزینه دایرکتوری پروژه برنامه را مشخص می کند. اگر می خواهید اسکریپت را بدون نیاز به تغییر به دایرکتوری پروژه راه اندازی کنید مفید است.
--port=<port>

به طور پیش فرض، ndk-gdb از پورت TCP محلی 5039 برای برقراری ارتباط با برنامه ای که در دستگاه مورد نظر اشکال زدایی می کند، استفاده می کند. استفاده از یک پورت متفاوت به شما امکان می‌دهد برنامه‌های در حال اجرا در دستگاه‌های مختلف یا شبیه‌سازهای متصل به یک دستگاه میزبان را به‌طور بومی اشکال زدایی کنید.

--adb=<file>

این گزینه ابزار اجرایی adb را مشخص می کند. تنها زمانی لازم است که مسیر خود را برای گنجاندن آن فایل اجرایی تنظیم نکرده باشید.

  • -d
  • -e
  • -s <serial>
  • این پرچم ها مشابه دستورات adb با نام های مشابه هستند. اگر چندین دستگاه یا شبیه ساز به دستگاه میزبان خود متصل هستید، این پرچم ها را تنظیم کنید. معانی آنها به شرح زیر است:

    -d
    به یک دستگاه فیزیکی متصل شوید.
    -e
    به یک دستگاه شبیه ساز متصل شوید.
    -s <serial>
    به یک دستگاه یا شبیه ساز خاص متصل شوید. در اینجا، <serial> نام دستگاه است که توسط دستور adb devices فهرست شده است.

    همچنین، می‌توانید متغیر محیطی ADB_SERIAL را برای فهرست کردن یک دستگاه خاص، بدون نیاز به گزینه خاصی تعریف کنید.

  • --exec=<file>
  • -x <file>
  • این گزینه به ndk-gdb می گوید که پس از اتصال به فرآیندی که در حال رفع اشکال است، دستورات اولیه دیباگر موجود در <file> را اجرا کند. اگر می خواهید کاری را به طور مکرر انجام دهید، مانند تنظیم لیستی از نقاط شکست، و سپس از سرگیری اجرای خودکار، این یک ویژگی مفید است.

    --nowait

    غیرفعال کردن مکث کد جاوا تا زمانی که دیباگر متصل شود. عبور از این گزینه ممکن است باعث شود که دیباگر نقاط شکست اولیه را از دست بدهد.

    --tui -t

    اگر رابط کاربری متنی موجود است، آن را فعال کنید.

    --gnumake-flag=<flag>

    این گزینه یک پرچم (یا پرچم) اضافی برای ارسال به سیستم ndk-build هنگام جستجو برای اطلاعات پروژه است. می توانید از چندین نمونه از این گزینه در همان دستور استفاده کنید.

    توجه: سه گزینه نهایی در این جدول فقط برای نسخه پایتون ndk-gdb است.