'\" t .\" Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved. .\" DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. .\" .\" This code is free software; you can redistribute it and/or modify it .\" under the terms of the GNU General Public License version 2 only, as .\" published by the Free Software Foundation. .\" .\" This code is distributed in the hope that it will be useful, but WITHOUT .\" ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or .\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License .\" version 2 for more details (a copy is included in the LICENSE file that .\" accompanied this code). .\" .\" You should have received a copy of the GNU General Public License version .\" 2 along with this work; if not, write to the Free Software Foundation, .\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. .\" .\" Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA .\" or visit www.oracle.com if you need additional information or have any .\" questions. .\" .\" Arch: generic .\" Software: JDK 8 .\" Date: 21 November 2013 .\" SectDesc: Basic Tools .\" Title: jdb.1 .\" .if n .pl 99999 .TH jdb 1 "21 November 2013" "JDK 8" "Basic Tools" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "نام (NAME)" jdb \- یافتن و رفع باگ‌ها در برنامه‌های بستر جاوا\&. .SH "خلاصه دستور (SYNOPSIS)" .sp .nf \fBjdb\fR [\fIoptions\fR] [\fIclassname\fR] [\fIarguments\fR] .fi .sp .TP \fIoptions\fR گزینه‌های خط فرمان\&. بخش «گزینه‌ها» را ببینید\&. .TP \fIclass\fRname نام کلاس اصلی برای اشکال‌زدایی\&. .TP \fIarguments\fR آرگومان‌های ارسال‌شده به متد \f3main()\fR کلاس\&. .SH "توضیحات (DESCRIPTION)" اشکال‌زدای جاوا (JDB) یک اشکال‌زدای ساده خط فرمانی برای کلاس‌های جاوا است\&. دستور \f3jdb\fR و گزینه‌های آن JDB را فراخوانی می‌کنند\&. دستور \f3jdb\fR معماری اشکال‌زدای بستر جاوا (JDBA) را به نمایش می‌گذارد و امکان بازرسی و اشکال‌زدایی یک ماشین مجازی جاوا (JVM) محلی یا از راه دور را فراهم می‌کند\&. بخش معماری اشکال‌زدای بستر جاوا (JDBA) را در http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jpda/index\&.html ببینید\&. .SS "شروع یک نشست JDB (START A JDB SESSION)" راه‌های متعددی برای شروع یک نشست JDB وجود دارد\&. متداول‌ترین روش این است که JDB یک JVM جدید را همراه با کلاس اصلی برنامه‌ای که قرار است اشکال‌زدایی شود، راه‌اندازی کند\&. این کار با جایگزین کردن دستور \f3jdb\fR به جای دستور \f3java\fR در خط فرمان انجام می‌شود\&. برای نمونه، اگر کلاس اصلی برنامه شما \f3MyClass\fR است، از دستور زیر برای اشکال‌زدایی آن تحت JDB استفاده کنید: .sp .nf \f3jdb MyClass\fP .fi .nf \f3\fP .fi .sp هنگامی که به این شیوه راه‌اندازی شود، دستور \f3jdb\fR یک JVM ثانویه را با پارامترهای مشخص‌شده فراخوانی کرده، کلاس تعیین‌شده را بارگذاری می‌کند و JVM را پیش از اجرای نخستین دستورالعمل آن کلاس متوقف می‌سازد\&. .PP روش دیگر برای استفاده از دستور \f3jdb\fR، متصل کردن آن به یک JVM در حال اجرا است\&. نحو راه‌اندازی یک JVM به گونه‌ای که دستور \f3jdb\fR بتواند در حین اجرا به آن متصل شود به صورت زیر است\&. این کار کتابخانه‌های اشکال‌زدایی درون‌فرایندی (in-process) را بارگذاری کرده و نوع اتصال برقرار شونده را مشخص می‌کند\&. .sp .nf \f3java \-agentlib:jdwp=transport=dt_socket,server=y,suspend=n MyClass\fP .fi .nf \f3\fP .fi .sp سپس می‌توانید با دستور زیر، \f3jdb\fR را به JVM متصل کنید: .sp .nf \f3jdb \-attach 8000\fP .fi .nf \f3\fP .fi .sp در این حالت، آرگومان \f3MyClass\fR در خط فرمان \f3jdb\fR مشخص نمی‌شود زیرا دستور \f3jdb\fR به جای راه‌اندازی یک JVM جدید، به یک JVM موجود متصل می‌شود\&. .PP روش‌های بسیار دیگری نیز برای اتصال اشکال‌زدا به یک JVM وجود دارد که همگی توسط دستور \f3jdb\fR پشتیبانی می‌شوند\&. معماری اشکال‌زدای بستر جاوا مستندات بیشتری درباره این گزینه‌های اتصال ارائه کرده است\&. .SS "دستورات پایه JDB (BASIC JDB COMMANDS)" در ادامه فهرستی از دستورات پایه‌ای \f3jdb\fR آورده شده است\&. ابزار JDB از دستورات دیگری نیز پشتیبانی می‌کند که می‌توانید آن‌ها را با گزینه \f3-help\fR مشاهده کنید\&. .TP help or ? دستورات \f3help\fR یا \f3?\fR فهرستی از دستورات شناخته‌شده را همراه با شرحی مختصر نمایش می‌دهند\&. .TP run پس از راه‌اندازی JDB و تعیین نقاط توقف (breakpoints)، می‌توانید از دستور \f3run\fR برای اجرای برنامه تحت اشکال‌زدایی استفاده کنید\&. دستور \f3run\fR تنها زمانی در دسترس است که دستور \f3jdb\fR خودش برنامه تحت اشکال‌زدایی را راه‌اندازی کند، نه زمانی که به یک JVM در حال اجرا متصل می‌شود\&. .TP cont اجرای برنامه تحت اشکال‌زدایی را پس از یک نقطه توقف، استثنا (exception) یا گام، ادامه می‌دهد\&. .TP print اشیای جاوا و مقادیر اولیه (primitive) را نمایش می‌دهد\&. برای متغیرها یا فیلدهایی از انواع اولیه، مقدار واقعی چاپ می‌شود\&. برای اشیاء، توصیفی کوتاه چاپ می‌شود\&. برای آگاهی از نحوه دریافت اطلاعات بیشتر درباره یک شیء، به دستور dump مراجعه کنید\&. \fIنکته:\fR برای نمایش متغیرهای محلی، کلاس مربوطه باید با گزینه \f3javac -g\fR کامپایل شده باشد\&. دستور \f3print\fR از بسیاری از عبارات ساده جاوا، از جمله مواردی که فراخوانی متد دارند، پشتیبانی می‌کند؛ برای مثال: .sp .nf \f3print MyClass\&.myStaticField\fP .fi .nf \f3print myObj\&.myInstanceField\fP .fi .nf \f3print i + j + k (i, j, k are primities and either fields or local variables)\fP .fi .nf \f3print myObj\&.myMethod() (if myMethod returns a non\-null)\fP .fi .nf \f3print new java\&.lang\&.String("Hello")\&.length()\fP .fi .nf \f3\fP .fi .sp .TP dump برای مقادیر اولیه، دستور \f3dump\fR رفتاری مشابه دستور \f3print\fR دارد\&. برای اشیاء، دستور \f3dump\fR مقدار فعلی هر فیلد تعریف‌شده در شیء را چاپ می‌کند\&. فیلدهای ایستا (static) و نمونه (instance) هر دو گنجانده شده‌اند\&. دستور \f3dump\fR از همان مجموعه عباراتِ دستور \f3print\fR پشتیبانی می‌کند\&. .TP threads فهرست ریسه‌هایی (threads) که هم‌اکنون در حال اجرا هستند را نمایش می‌دهد\&. برای هر ریسه، نام و وضعیت فعلی آن چاپ شده و نمایه‌ای (index) که می‌تواند در سایر دستورات استفاده شود ارائه می‌گردد\&. در این مثال، نمایه ریسه 4 است، ریسه نمونه‌ای از \f3java\&.lang\&.Thread\fR است، نام ریسه \f3main\fR بوده و هم‌اکنون در حال اجرا است\&. .sp .nf \f34\&. (java\&.lang\&.Thread)0x1 main running\fP .fi .nf \f3\fP .fi .sp .TP thread یک ریسه را به عنوان ریسه جاری انتخاب می‌کند\&. بسیاری از دستورات \f3jdb\fR بر اساس تنظیم ریسه جاری کار می‌کنند\&. ریسه با استفاده از نمایه ریسه که در دستور threads شرح داده شد تعیین می‌شود\&. .TP where دستور \f3where\fR بدون آرگومان، پشته (stack) ریسه جاری را تخلیه (dump) و نمایش می‌دهد\&. دستور \f3where\fR\f3all\fR پشته تمام ریسه‌ها در گروه ریسه جاری را تخلیه می‌کند\&. دستور \f3where\fR\f3threadindex\fR پشته ریسه مشخص‌شده را تخلیه می‌کند\&. اگر ریسه جاری از طریق رویدادی مانند یک نقطه توقف یا از طریق دستور \f3suspend\fR تعلیق شده باشد، می‌توان متغیرها و فیلدهای محلی را با دستورات \f3print\fR و \f3dump\fR نمایش داد\&. دستورات \f3up\fR و \f3down\fR مشخص می‌کنند که کدام فریم پشته (stack frame)، فریم جاری باشد\&. .SS "نقاط توقف (BREAKPOINTS)" نقاط توقف را می‌توان در JDB بر اساس شماره خطوط یا در نخستین دستورالعمل یک متد تعیین کرد؛ برای مثال: .TP 0.2i \(bu دستور \f3stop at MyClass:22\fR یک نقطه توقف در نخستین دستورالعمل خط 22 از فایل مبدأ حاوی \f3MyClass\fR تنظیم می‌کند\&. .TP 0.2i \(bu دستور \f3stop in java\&.lang\&.String\&.length\fR یک نقطه توقف در ابتدای متد \f3java\&.lang\&.String\&.length\fR تنظیم می‌کند\&. .TP 0.2i \(bu دستور \f3stop in MyClass\&.\fR از \f3\fR برای شناسایی کد راه‌اندازی ایستا (static initialization) برای \f3MyClass\fR استفاده می‌کند\&. .PP هنگامی که یک متد سربارگذاری (overload) شده باشد، باید نوع آرگومان‌های آن را نیز مشخص کنید تا متد مناسب برای نقطه توقف انتخاب شود؛ برای مثال، \f3MyClass\&.myMethod(int,java\&.lang\&.String)\fR یا \f3MyClass\&.myMethod()\fR\&. .PP دستور \f3clear\fR با استفاده از نحو روبرو نقاط توقف را حذف می‌کند: \f3clear MyClass:45\fR\&. استفاده از دستور \f3clear\fR یا \f3stop\fR بدون آرگومان، فهرستی از تمامی نقاط توقف فعال را نمایش می‌دهد\&. دستور \f3cont\fR اجرا را ادامه می‌دهد\&. .SS "پیمایش گام‌به‌گام (STEPPING)" دستور \f3step\fR اجرا را به خط بعدی منتقل می‌کند، چه در فریم پشته فعلی باشد و چه در متد فراخوانی‌شده\&. دستور \f3next\fR اجرا را به خط بعدی در فریم پشته جاری هدایت می‌کند\&. .SS "استثناها (EXCEPTIONS)" هنگامی که استثنایی رخ دهد که برای آن هیچ عبارت \f3catch\fR در هیچ کجای پشته فراخوانی ریسه صادرکننده وجود نداشته باشد، JVM به طور معمول ردپای استثنا (exception trace) را چاپ کرده و خارج می‌شود\&. با این حال هنگام اجرا تحت JDB، کنترل در همان نقطه‌ای که استثنا صادر شده به JDB بازمی‌گردد\&. سپس می‌توانید از دستور \f3jdb\fR برای بررسی و تشخیص علت استثنا استفاده کنید\&. .PP از دستور \f3catch\fR برای متوقف کردن برنامه تحت اشکال‌زدایی در زمان صدور استثناهای دیگر استفاده کنید؛ برای مثال: \f3catch java\&.io\&.FileNotFoundException\fR یا \f3catch\fR\f3mypackage\&.BigTroubleException\fR\&. هر استثنایی که نمونه‌ای از کلاس مشخص‌شده یا زیرکلاس آن باشد، برنامه را در همان نقطه‌ای که رخ می‌دهد متوقف می‌سازد\&. .PP دستور \f3ignore\fR تأثیر دستور قبلی \f3catch\fR را لغو می‌کند\&. دستور \f3ignore\fR باعث نمی‌شود که JVM استثناهای خاص را نادیده بگیرد، بلکه تنها باعث می‌شود که اشکال‌زدا آن‌ها را نادیده بگیرد\&. .SH "گزینه‌ها (OPTIONS)" هنگامی که به جای دستور \f3java\fR از دستور \f3jdb\fR در خط فرمان استفاده می‌کنید، دستور \f3jdb\fR بسیاری از همان گزینه‌های دستور \f3java\fR را می‌پذیرد، از جمله گزینه‌های \f3-D\fR، \f3-classpath\fR و \f3-X\fR\&. فهرست زیر شامل گزینه‌های اضافی است که توسط دستور \f3jdb\fR پذیرفته می‌شوند\&. .PP گزینه‌های دیگری نیز برای ارائه سازوکارهای جایگزین جهت اتصال اشکال‌زدا به JVM مورد نظر پشتیبانی می‌شوند\&. برای مستندات تکمیلی درباره این روش‌های اتصال، معماری اشکال‌زدای بستر جاوا (JPDA) را در http://docs\&.oracle\&.com/javase/8/docs/technotes/guides/jpda/index\&.html ببینید\&. .TP -help .br پیام راهنما را نمایش می‌دهد\&. .TP -sourcepath \fIdir1:dir2: \&. \&. \&.\fR .br از مسیر مشخص‌شده برای جستجوی فایل‌های مبدأ در مسیر تعیین‌شده استفاده می‌کند\&. اگر این گزینه مشخص نشود، از مسیر پیش‌فرض نقطه (\&.) استفاده می‌شود\&. .TP -attach \fIaddress\fR .br اشکال‌زدا را با استفاده از سازوکار اتصال پیش‌فرض به یک JVM در حال اجرا متصل می‌کند\&. .TP -listen \fIaddress\fR .br منتظر می‌ماند تا یک JVM در حال اجرا با یک اتصال‌دهنده استاندارد به آدرس مشخص‌شده متصل شود\&. .TP -launch .br برنامه تحت اشکال‌زدایی را بلافاصله پس از راه‌اندازی JDB اجرا می‌کند\&. گزینه \f3-launch\fR نیاز به استفاده از دستور \f3run\fR را برطرف می‌کند\&. برنامه تحت اشکال‌زدایی راه‌اندازی شده و دقیقاً پیش از بارگذاری کلاس اولیه برنامه متوقف می‌شود\&. در آن نقطه، می‌توانید هر نقطه توقف لازم را تنظیم کرده و با استفاده از دستور \f3cont\fR به اجرا ادامه دهید\&. .TP -listconnectors .br اتصال‌دهنده‌های موجود در این JVM را فهرست می‌کند\&. .TP -connect connector-name:\fIname1=value1\fR .br با اتصال‌دهنده مشخص‌شده و مقادیر آرگومان‌های فهرست‌شده، به JVM هدف متصل می‌شود\&. .TP -dbgtrace [\fIflags\fR] .br اطلاعاتی را برای اشکال‌زدایی دستور \f3jdb\fR چاپ می‌کند\&. .TP -tclient .br برنامه را در Java HotSpot VM client اجرا می‌کند\&. .TP -tserver .br برنامه را در Java HotSpot VM server اجرا می‌کند\&. .TP -J\fIoption\fR .br گزینه \f3option\fR را به JVM ارسال می‌کند، که در آن option یکی از گزینه‌های شرح داده شده در صفحه ارجاع راه‌انداز برنامه‌های جاوا است\&. برای مثال، \f3-J-Xms48m\fR مقدار حافظه آغازین را به 48 مگابایت تنظیم می‌کند\&. به java(1) مراجعه کنید\&. .SH "گزینه‌های ارجاع‌شده به فرایند اشکال‌زدا (OPTIONS FORWARDED TO THE DEBUGGER PROCESS)" .TP -v -verbose[:\fIclass\fR|gc|jni] .br حالت پرگو (verbose) را فعال می‌کند\&. .TP -D\fIname\fR=\fIvalue\fR .br یک ویژگی سیستمی (system property) را تنظیم می‌کند\&. .TP -classpath \fIdir\fR .br دایرکتوری‌هایی را که باید برای یافتن کلاس‌ها در آن‌ها جستجو شود، به‌صورت جداشده با دونقطه (:) فهرست می‌کند\&. .TP -X\fIoption\fR .br گزینه غیراستاندارد JVM هدف\&. .SH "همچنین ببینید (SEE ALSO)" .TP 0.2i \(bu javac(1) .TP 0.2i \(bu java(1) .TP 0.2i \(bu javap(1) .RE .br 'pl 8.5i 'bp