JDB(1) JDK Commands JDB(1)

jdb - دیباگر و خطایاب تعاملی برنامه‌های جاوا (نسخه ۱۷)

jdb [options] [classname] [arguments]

نشان‌دهنده گزینه‌های خط فرمان jdb است. بخش گزینه‌های دستور jdb را ببینید.
نشان‌دهنده نام کلاس اصلی برنامه برای خطایابی است.
نشان‌دهنده آرگومان‌هایی است که به متد main() کلاس ارسال می‌شوند.

دیباگر جاوا (JDB) یک ابزار خطایاب ساده خط فرمانی برای کلاس‌های جاوا است. دستور jdb و گزینه‌های آن JDB را فراخوانی می‌کنند. دستور jdb معماری خطایابی بستر جاوا (JPDA) را پیاده‌سازی کرده و امکان بررسی و خطایابی یک ماشین مجازی جاوا (JVM) محلی یا از راه دور را فراهم می‌کند.

راه‌های گوناگونی برای شروع یک نشست JDB وجود دارد. متداول‌ترین روش این است که JDB یک JVM جدید همراه با کلاس اصلی برنامه مورد نظر برای خطایابی اجرا کند. این کار با جایگزین کردن دستور jdb به‌جای دستور java در خط فرمان انجام می‌شود. برای نمونه، اگر کلاس اصلی برنامه شما MyClass است، از دستور زیر برای خطایابی آن تحت JDB استفاده کنید:

jdb MyClass

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

روش دیگر استفاده از دستور jdb، متصل شدن به یک JVM در حال اجرا است. سینتکس اجرای یک JVM که دستور jdb بتواند پس از بالا آمدن به آن متصل شود به صورت زیر است. این دستور کتابخانه‌های خطایابی درون‌فرآیندی را بارگذاری کرده و نوع اتصال را مشخص می‌کند:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n MyClass

سپس می‌توانید با دستور زیر، jdb را به JVM متصل کنید:

jdb -attach 8000

عدد 8000 نشانی (درگاه) JVM در حال اجرا است.

آرگومان MyClass در این حالت در خط فرمان jdb مشخص نمی‌شود، زیرا دستور jdb به‌جای راه‌اندازی یک JVM جدید، به یک نمونه موجود متصل می‌شود.

روش‌های بسیار دیگری نیز برای اتصال دیباگر به یک JVM وجود دارد که همه آن‌ها توسط دستور jdb پشتیبانی می‌شوند. مستندات معماری خطایابی بستر جاوا (JPDA) حاوی توضیحات تکمیلی پیرامون این گزینه‌های اتصال است.

نقاط توقف (Breakpoints) را می‌توان در JDB بر اساس شماره خطوط یا نخستین دستورالعمل یک متد تنظیم کرد؛ برای نمونه:

•
دستور stop at MyClass:22 یک نقطه توقف در نخستین دستورالعمل خط ۲۲ فایل منبع حاوی MyClass تنظیم می‌کند.
•
دستور stop in java.lang.String.length یک نقطه توقف در آغاز متد java.lang.String.length قرار می‌دهد.
•
دستور stop in MyClass.<clinit> از <clinit> برای مشخص کردن کد مقداردهی اولیه ایستا (Static Initializer) در MyClass استفاده می‌کند.

هنگامی که یک متد سربارگذاری (Overload) شده است، باید انواع آرگومان‌های آن را نیز مشخص کنید تا متد مناسب برای نقطه توقف انتخاب شود؛ مانند MyClass.myMethod(int,java.lang.String) یا MyClass.myMethod().

دستور clear نقاط توقف را با سینتکس زیر حذف می‌کند: clear MyClass:45. استفاده از دستور clear یا stop بدون آرگومان، فهرستی از تمامی نقاط توقف فعال فعلی را نمایش می‌دهد. دستور cont اجرای برنامه را ادامه می‌دهد.

دستور step اجرای برنامه را به خط بعدی منتقل می‌کند؛ چه این خط در فریم پشته جاری باشد و چه درون متدی که فراخوانی شده است. دستور next اجرا را به خط بعدی در فریم پشته جاری هدایت می‌کند (بدون ورود به متدهای فراخوانی‌شده).

هنگامی که استثنایی (Exception) رخ دهد که هیچ عبارت catch متناظری برای آن در کل پشته فراخوانی ریسه پرتاب‌کننده وجود نداشته باشد، JVM معمولاً گزارش ردیابی استثنا (Stack Trace) را چاپ کرده و خارج می‌شود. اما در هنگام اجرا زیر نظر JDB، کنترل برنامه در همان نقطه پرتاب استثنا به JDB بازمی‌گردد. سپس می‌توانید با استفاده از دستور jdb علت وقوع استثنا را بررسی و عیب‌یابی کنید.

با استفاده از دستور catch می‌توانید برنامه را طوری تنظیم کنید که در زمان پرتاب سایر استثناها نیز متوقف شود؛ برای نمونه: catch java.io.FileNotFoundException یا catch mypackage.BigTroubleException. هر استثنایی که نمونه‌ای از کلاس مشخص‌شده یا زیرکلاس‌های آن باشد، برنامه را در نقطه‌ای که استثنا پرتاب می‌شود متوقف می‌کند.

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

هنگامی که در خط فرمان به‌جای دستور java از دستور jdb استفاده می‌کنید، دستور jdb بسیاری از گزینه‌های مشابه دستور java را می‌پذیرد.

گزینه‌های زیر توسط دستور jdb پشتیبانی می‌شوند:

پیام راهنما را نمایش می‌دهد.
از مسیرهای مشخص‌شده برای جستجوی فایل‌های منبع استفاده می‌کند. اگر این گزینه مشخص نشود، مسیر پیش‌فرض نقطه (.) به کار می‌رود.
دیباگر را با استفاده از مکانیزم اتصال پیش‌فرض به یک JVM در حال اجرا متصل می‌کند.
منتظر می‌ماند تا یک JVM در حال اجرا با رابط استاندارد به نشانی مشخص‌شده متصل شود.
منتظر می‌ماند تا یک JVM در حال اجرا با رابط استاندارد به هر نشانی در دسترس متصل گردد.
برنامه مورد نظر را بلافاصله پس از راه‌اندازی دستور jdb اجرا می‌کند. گزینه -launch نیاز به اجرای دستور run را برطرف می‌سازد. برنامه اجرا شده و درست پیش از بارگذاری کلاس اولیه برنامه متوقف می‌شود. در این مرحله می‌توانید نقاط توقف لازم را تنظیم کرده و با دستور cont اجرای برنامه را ادامه دهید.
رابط‌ها و متصل‌کننده‌های موجود در این JVM را فهرست می‌کند.
با استفاده از متصل‌کننده نام‌برده و مقادیر آرگومان‌های ارائه‌شده، به JVM هدف متصل می‌شود.
اطلاعات لازم برای خطایابی خود دستور jdb را چاپ می‌کند.
برنامه را در کلاینت Java HotSpot VM اجرا می‌کند.
برنامه را در سرور Java HotSpot VM اجرا می‌کند.
گزینه option را به JVM ارسال می‌کند؛ که در آن option یکی از گزینه‌های شرح‌داده‌شده در صفحه راهنمای راه‌انداز برنامه‌های جاوا است. برای نمونه، -J-Xms48m مقدار حافظه اولیه هنگام راه‌اندازی را روی ۴۸ مگابایت تنظیم می‌کند. بخش Overview of Java Options در صفحه java را ببینید.

گزینه‌های زیر به فرآیند در حال خطایابی (Debuggee) ارسال می‌شوند:

حالت پرگویی (Verbose) را فعال می‌کند.
یک ویژگی سیستمی (System Property) را تنظیم می‌کند.
پوشه‌هایی را که برای جستجوی کلاس‌ها با دو نقطه (:) از هم جدا شده‌اند فهرست می‌کند.
یک گزینه غیراستاندارد برای JVM هدف.

گزینه‌های دیگری نیز برای فراهم کردن سازوکارهای جایگزین جهت اتصال دیباگر به JVM مورد نظر پشتیبانی می‌شوند.

2021 JDK 17