| jdb(1) | Basic Tools | jdb(1) |
نام (NAME)
jdb - یافتن و رفع اشکال در برنامههای بستر جاوا (نسخه ۸)
خلاصه دستور (SYNOPSIS)
jdb [options] [classname] [arguments]
توضیحات (DESCRIPTION)
اشکالزدای جاوا (JDB) یک ابزار خط فرمانی ساده برای اشکالزدایی کلاسهای جاوا است. دستور jdb و گزینههای آن، ابزار JDB را فراخوانی میکنند. دستور jdb معماری اشکالزدایی بستر جاوا (JPDA) را پیادهسازی کرده و امکان بررسی و اشکالزدایی ماشین مجازی جاوا (JVM) محلی یا از راه دور را فراهم میسازد. به معماری اشکالزدایی بستر جاوا (JPDA) در http://docs.oracle.com/javase/8/docs/technotes/guides/jpda/index.html مراجعه کنید.
شروع یک نشست JDB (START A JDB SESSION)
راههای متعددی برای شروع یک نشست JDB وجود دارد. متداولترین روش این است که JDB یک JVM جدید همراه با کلاس اصلی برنامهای که باید اشکالزدایی شود اجرا کند. برای این کار، کافی است دستور jdb را در خط فرمان جایگزین دستور java کنید. برای مثال، اگر کلاس اصلی برنامه شما MyClass است، از دستور زیر برای اشکالزدایی آن تحت JDB استفاده کنید:
jdb MyClass
هنگامی که به این شیوه شروع شود، دستور jdb یک JVM دوم را با پارامترهای مشخصشده فراخوانی میکند، کلاس مورد نظر را بارگذاری نموده، و JVM را درست پیش از اجرای نخستین دستورالعمل آن کلاس متوقف میسازد.
روش دیگر استفاده از دستور jdb متصل شدن به یک JVM در حال اجرا است. نحو راهاندازی یک JVM که دستور jdb در هنگام اجرای JVM به آن متصل شود به شرح زیر است. این کار کتابخانههای اشکالزدایی درونفرآیندی را بارگذاری کرده و نوع اتصال برقرارشده را تعیین مینماید.
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n MyClass
سپس میتوانید با دستور زیر، jdb را به JVM متصل کنید:
jdb -attach 8000
در این حالت، آرگومان MyClass در خط فرمان jdb مشخص نمیشود، زیرا دستور jdb به جای راهاندازی یک JVM جدید، به یک JVM موجود متصل میشود.
راههای متنوع دیگری نیز برای متصل کردن اشکالزدا به JVM وجود دارد و همگی آنها توسط دستور jdb پشتیبانی میشوند. مستندات معماری اشکالزدای بستر جاوا حاوی توضیحات تکمیلی درباره این گزینههای اتصال است.
دستورات پایه JDB (BASIC JDB COMMANDS)
در ادامه فهرستی از دستورات پایهای jdb آورده شده است. ابزار JDB از دستورات دیگری نیز پشتیبانی میکند که میتوانید آنها را با گزینه -help مشاهده کنید.
- help or ?
- دستورات help یا ? فهرستی از دستورات شناختهشده را همراه با شرحی مختصر نمایش میدهند.
- run
- پس از راهاندازی JDB و تعیین نقاط توقف (breakpoints)، میتوانید از دستور run برای اجرای برنامه تحت اشکالزدایی استفاده کنید. دستور run تنها زمانی در دسترس است که دستور jdb خودش برنامه تحت اشکالزدایی را راهاندازی کند، نه زمانی که به یک JVM در حال اجرا متصل میشود.
- cont
- اجرای برنامه تحت اشکالزدایی را پس از یک نقطه توقف، استثنا (exception) یا گام، ادامه میدهد.
- اشیای جاوا
و مقادیر
اولیه (primitive) را
نمایش
میدهد.
برای
متغیرها یا
فیلدهایی
از انواع
اولیه،
مقدار
واقعی چاپ
میشود.
برای
اشیاء،
توصیفی
کوتاه چاپ
میشود.
برای آگاهی
از نحوه
دریافت
اطلاعات
بیشتر
درباره یک
شیء، به
دستور dump
مراجعه
کنید.
نکته: برای نمایش متغیرهای محلی، کلاس مربوطه باید با گزینه javac -g کامپایل شده باشد.
دستور print از بسیاری از عبارات ساده جاوا، از جمله مواردی که فراخوانی متد دارند، پشتیبانی میکند؛ برای مثال:
print MyClass.myStaticField
print myObj.myInstanceField
print i + j + k (i, j, k are primities and either fields or local variables)
print myObj.myMethod() (if myMethod returns a non-null)
print new java.lang.String("Hello").length() - dump
- برای مقادیر اولیه، دستور dump رفتاری مشابه دستور print دارد. برای اشیاء، دستور dump مقدار فعلی هر فیلد تعریفشده در شیء را چاپ میکند. فیلدهای ایستا (static) و نمونه (instance) هر دو گنجانده شدهاند. دستور dump از همان مجموعه عباراتِ دستور print پشتیبانی میکند.
- threads
- فهرست
ریسههایی
(threads) که
هماکنون
در حال اجرا
هستند را
نمایش
میدهد.
برای هر
ریسه، نام و
وضعیت فعلی
آن چاپ شده
و نمایهای
(index) که
میتواند
در سایر
دستورات
استفاده
شود ارائه
میگردد. در
این مثال،
نمایه ریسه
4 است، ریسه
نمونهای
از java.lang.Thread است،
نام ریسه main
بوده و
هماکنون
در حال اجرا
است.
4. (java.lang.Thread)0x1 main running
- thread
- یک ریسه را به عنوان ریسه جاری انتخاب میکند. بسیاری از دستورات jdb بر اساس تنظیم ریسه جاری کار میکنند. ریسه با استفاده از نمایه ریسه که در دستور threads شرح داده شد تعیین میشود.
- where
- دستور where
بدون
آرگومان،
پشته (stack) ریسه
جاری را
تخلیه (dump) و
نمایش
میدهد.
دستور whereall
پشته تمام
ریسهها در
گروه ریسه
جاری را
تخلیه
میکند.
دستور wherethreadindex
پشته ریسه
مشخصشده
را تخلیه
میکند.
اگر ریسه جاری از طریق رویدادی مانند یک نقطه توقف یا از طریق دستور suspend تعلیق شده باشد، میتوان متغیرها و فیلدهای محلی را با دستورات print و dump نمایش داد. دستورات up و down مشخص میکنند که کدام فریم پشته (stack frame)، فریم جاری باشد.
نقاط توقف (BREAKPOINTS)
نقاط توقف را میتوان در JDB بر اساس شماره خطوط یا در نخستین دستورالعمل یک متد تعیین کرد؛ برای مثال:
- •
- دستور stop at MyClass:22 یک نقطه توقف در نخستین دستورالعمل خط 22 از فایل مبدأ حاوی MyClass تنظیم میکند.
- •
- دستور stop in java.lang.String.length یک نقطه توقف در ابتدای متد java.lang.String.length تنظیم میکند.
- •
- دستور stop in MyClass.<clinit> از <clinit> برای شناسایی کد راهاندازی ایستا (static initialization) برای MyClass استفاده میکند.
هنگامی که یک متد سربارگذاری (overload) شده باشد، باید نوع آرگومانهای آن را نیز مشخص کنید تا متد مناسب برای نقطه توقف انتخاب شود؛ برای مثال، MyClass.myMethod(int,java.lang.String) یا MyClass.myMethod().
دستور clear با استفاده از نحو روبرو نقاط توقف را حذف میکند: clear MyClass:45. استفاده از دستور clear یا stop بدون آرگومان، فهرستی از تمامی نقاط توقف فعال را نمایش میدهد. دستور cont اجرا را ادامه میدهد.
پیمایش گامبهگام (STEPPING)
دستور step اجرا را به خط بعدی منتقل میکند، چه در فریم پشته فعلی باشد و چه در متد فراخوانیشده. دستور next اجرا را به خط بعدی در فریم پشته جاری هدایت میکند.
استثناها (EXCEPTIONS)
هنگامی که استثنایی رخ دهد که برای آن هیچ عبارت catch در هیچ کجای پشته فراخوانی ریسه صادرکننده وجود نداشته باشد، JVM به طور معمول ردپای استثنا (exception trace) را چاپ کرده و خارج میشود. با این حال هنگام اجرا تحت JDB، کنترل در همان نقطهای که استثنا صادر شده به JDB بازمیگردد. سپس میتوانید از دستور jdb برای بررسی و تشخیص علت استثنا استفاده کنید.
از دستور catch برای متوقف کردن برنامه تحت اشکالزدایی در زمان صدور استثناهای دیگر استفاده کنید؛ برای مثال: catch java.io.FileNotFoundException یا catchmypackage.BigTroubleException. هر استثنایی که نمونهای از کلاس مشخصشده یا زیرکلاس آن باشد، برنامه را در همان نقطهای که رخ میدهد متوقف میسازد.
دستور ignore تأثیر دستور قبلی catch را لغو میکند. دستور ignore باعث نمیشود که JVM استثناهای خاص را نادیده بگیرد، بلکه تنها باعث میشود که اشکالزدا آنها را نادیده بگیرد.
گزینهها (OPTIONS)
هنگامی که به جای دستور java از دستور jdb در خط فرمان استفاده میکنید، دستور jdb بسیاری از همان گزینههای دستور java را میپذیرد، از جمله گزینههای -D، -classpath و -X. فهرست زیر شامل گزینههای اضافی است که توسط دستور jdb پذیرفته میشوند.
گزینههای دیگری نیز برای ارائه سازوکارهای جایگزین جهت اتصال اشکالزدا به JVM مورد نظر پشتیبانی میشوند. برای مستندات تکمیلی درباره این روشهای اتصال، معماری اشکالزدای بستر جاوا (JPDA) را در http://docs.oracle.com/javase/8/docs/technotes/guides/jpda/index.html ببینید.
- -help
-
پیام راهنما را نمایش میدهد. - -sourcepath dir1:dir2: . . .
-
از مسیر مشخصشده برای جستجوی فایلهای مبدأ در مسیر تعیینشده استفاده میکند. اگر این گزینه مشخص نشود، از مسیر پیشفرض نقطه (.) استفاده میشود. - -attach address
-
اشکالزدا را با استفاده از سازوکار اتصال پیشفرض به یک JVM در حال اجرا متصل میکند. - -listen address
-
منتظر میماند تا یک JVM در حال اجرا با یک اتصالدهنده استاندارد به آدرس مشخصشده متصل شود. - -launch
-
برنامه تحت اشکالزدایی را بلافاصله پس از راهاندازی JDB اجرا میکند. گزینه -launch نیاز به استفاده از دستور run را برطرف میکند. برنامه تحت اشکالزدایی راهاندازی شده و دقیقاً پیش از بارگذاری کلاس اولیه برنامه متوقف میشود. در آن نقطه، میتوانید هر نقطه توقف لازم را تنظیم کرده و با استفاده از دستور cont به اجرا ادامه دهید. - -listconnectors
-
اتصالدهندههای موجود در این JVM را فهرست میکند. - -connect connector-name:name1=value1
-
با اتصالدهنده مشخصشده و مقادیر آرگومانهای فهرستشده، به JVM هدف متصل میشود. - -dbgtrace [flags]
-
اطلاعاتی را برای اشکالزدایی دستور jdb چاپ میکند. - -tclient
-
برنامه را در Java HotSpot VM client اجرا میکند. - -tserver
-
برنامه را در Java HotSpot VM server اجرا میکند. - -Joption
-
گزینه option را به JVM ارسال میکند، که در آن option یکی از گزینههای شرح داده شده در صفحه ارجاع راهانداز برنامههای جاوا است. برای مثال، -J-Xms48m مقدار حافظه آغازین را به 48 مگابایت تنظیم میکند. به java(1) مراجعه کنید.
گزینههای ارسالشده به فرآیند اشکالزدا (OPTIONS FORWARDED TO THE DEBUGGER PROCESS)
- -v -verbose[:class|gc|jni]
-
حالت پرگو (verbose) را فعال میکند. - -Dname=value
-
یک ویژگی سیستمی (system property) را تنظیم میکند. - -classpath dir
-
دایرکتوریهایی را که باید برای یافتن کلاسها در آنها جستجو شود، بهصورت جداشده با دونقطه (:) فهرست میکند. - -Xoption
-
گزینه غیراستاندارد JVM هدف.
همچنین ببینید (SEE ALSO)
- •
- javac(1)
- •
- java(1)
- •
- javah(1)
- •
- javap(1)
| 21 November 2013 | JDK 8 |