| jdb(1) | Basic Tools | jdb(1) |
نام (NAME)
jdb - یافتن و رفع باگها در برنامههای بستر جاوا.
خلاصه دستور (SYNOPSIS)
jdb [options] [classname] [arguments]
توضیحات (DESCRIPTION)
اشکالزدای جاوا (JDB) یک اشکالزدای ساده خط فرمانی برای کلاسهای جاوا است. دستور jdb و گزینههای آن JDB را فراخوانی میکنند. دستور jdb معماری اشکالزدای بستر جاوا (JDBA) را به نمایش میگذارد و امکان بازرسی و اشکالزدایی یک ماشین مجازی جاوا (JVM) محلی یا از راه دور را فراهم میکند. بخش معماری اشکالزدای بستر جاوا (JDBA) را در 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 بتواند در حین اجرا به آن متصل شود به صورت زیر است. این کار کتابخانههای اشکالزدایی درونفرایندی (in-process) را بارگذاری کرده و نوع اتصال برقرار شونده را مشخص میکند.
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)
- •
- javap(1)
| 21 November 2013 | JDK 8 |