.\" Copyright (c) 1995, 2018, 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. .\" .\" Automatically generated by Pandoc 2.3.1 .\" .TH "JDB" "1" "2021" "JDK 17" "JDK Commands" .hy .SH "نام (NAME)" .PP jdb \- دیباگر و خطایاب تعاملی برنامه‌های جاوا (نسخه ۱۷) .SH "خلاصه دستور (SYNOPSIS)" .PP \f[CB]jdb\f[R] [\f[I]options\f[R]] [\f[I]classname\f[R]] [\f[I]arguments\f[R]] .TP .B \f[I]options\f[R] نشان‌دهنده گزینه‌های خط فرمان \f[CB]jdb\f[R] است. بخش \f[B]گزینه‌های دستور jdb\f[R] را ببینید. .RS .RE .TP .B \f[I]classname\f[R] نشان‌دهنده نام کلاس اصلی برنامه برای خطایابی است. .RS .RE .TP .B \f[I]arguments\f[R] نشان‌دهنده آرگومان‌هایی است که به متد \f[CB]main()\f[R] کلاس ارسال می‌شوند. .RS .RE .SH "توضیحات (DESCRIPTION)" .PP دیباگر جاوا (JDB) یک ابزار خطایاب ساده خط فرمانی برای کلاس‌های جاوا است. دستور \f[CB]jdb\f[R] و گزینه‌های آن JDB را فراخوانی می‌کنند. دستور \f[CB]jdb\f[R] معماری خطایابی بستر جاوا (JPDA) را پیاده‌سازی کرده و امکان بررسی و خطایابی یک ماشین مجازی جاوا (JVM) محلی یا از راه دور را فراهم می‌کند. .SH "شروع یک نشست JDB (START A JDB SESSION)" .PP راه‌های گوناگونی برای شروع یک نشست JDB وجود دارد. متداول‌ترین روش این است که JDB یک JVM جدید همراه با کلاس اصلی برنامه مورد نظر برای خطایابی اجرا کند. این کار با جایگزین کردن دستور \f[CB]jdb\f[R] به‌جای دستور \f[CB]java\f[R] در خط فرمان انجام می‌شود. برای نمونه، اگر کلاس اصلی برنامه شما \f[CB]MyClass\f[R] است، از دستور زیر برای خطایابی آن تحت JDB استفاده کنید: .RS .PP \f[CB]jdb\ MyClass\f[R] .RE .PP هنگامی که به این شیوه شروع شود، دستور \f[CB]jdb\f[R] یک JVM دوم را با پارامترهای مشخص‌شده فراخوانی می‌کند، کلاس تعیین‌شده را بارگذاری کرده و اجرای JVM را پیش از نخستین دستورالعمل آن کلاس متوقف می‌سازد. .PP روش دیگر استفاده از دستور \f[CB]jdb\f[R]، متصل شدن به یک JVM در حال اجرا است. سینتکس اجرای یک JVM که دستور \f[CB]jdb\f[R] بتواند پس از بالا آمدن به آن متصل شود به صورت زیر است. این دستور کتابخانه‌های خطایابی درون‌فرآیندی را بارگذاری کرده و نوع اتصال را مشخص می‌کند: .RS .PP \f[CB]java\ \-agentlib:jdwp=transport=dt_socket,server=y,suspend=n\ MyClass\f[R] .RE .PP سپس می‌توانید با دستور زیر، \f[CB]jdb\f[R] را به JVM متصل کنید: .RS .PP \f[CB]jdb\ \-attach\ 8000\f[R] .RE .PP عدد 8000 نشانی (درگاه) JVM در حال اجرا است. .PP آرگومان \f[CB]MyClass\f[R] در این حالت در خط فرمان \f[CB]jdb\f[R] مشخص نمی‌شود، زیرا دستور \f[CB]jdb\f[R] به‌جای راه‌اندازی یک JVM جدید، به یک نمونه موجود متصل می‌شود. .PP روش‌های بسیار دیگری نیز برای اتصال دیباگر به یک JVM وجود دارد که همه آن‌ها توسط دستور \f[CB]jdb\f[R] پشتیبانی می‌شوند. مستندات معماری خطایابی بستر جاوا (JPDA) حاوی توضیحات تکمیلی پیرامون این گزینه‌های اتصال است. .SH "نقاط توقف (BREAKPOINTS)" .PP نقاط توقف (Breakpoints) را می‌توان در JDB بر اساس شماره خطوط یا نخستین دستورالعمل یک متد تنظیم کرد؛ برای نمونه: .IP \[bu] 2 دستور \f[CB]stop\ at\ MyClass:22\f[R] یک نقطه توقف در نخستین دستورالعمل خط ۲۲ فایل منبع حاوی \f[CB]MyClass\f[R] تنظیم می‌کند. .IP \[bu] 2 دستور \f[CB]stop\ in\ java.lang.String.length\f[R] یک نقطه توقف در آغاز متد \f[CB]java.lang.String.length\f[R] قرار می‌دهد. .IP \[bu] 2 دستور \f[CB]stop\ in\ MyClass.\f[R] از \f[CB]\f[R] برای مشخص کردن کد مقداردهی اولیه ایستا (Static Initializer) در \f[CB]MyClass\f[R] استفاده می‌کند. .PP هنگامی که یک متد سربارگذاری (Overload) شده است، باید انواع آرگومان‌های آن را نیز مشخص کنید تا متد مناسب برای نقطه توقف انتخاب شود؛ مانند \f[CB]MyClass.myMethod(int,java.lang.String)\f[R] یا \f[CB]MyClass.myMethod()\f[R]. .PP دستور \f[CB]clear\f[R] نقاط توقف را با سینتکس زیر حذف می‌کند: \f[CB]clear\ MyClass:45\f[R]. استفاده از دستور \f[CB]clear\f[R] یا \f[CB]stop\f[R] بدون آرگومان، فهرستی از تمامی نقاط توقف فعال فعلی را نمایش می‌دهد. دستور \f[CB]cont\f[R] اجرای برنامه را ادامه می‌دهد. .SH "پیمایش گام‌به‌گام (STEPPING)" .PP دستور \f[CB]step\f[R] اجرای برنامه را به خط بعدی منتقل می‌کند؛ چه این خط در فریم پشته جاری باشد و چه درون متدی که فراخوانی شده است. دستور \f[CB]next\f[R] اجرا را به خط بعدی در فریم پشته جاری هدایت می‌کند (بدون ورود به متدهای فراخوانی‌شده). .SH "استثناها (EXCEPTIONS)" .PP هنگامی که استثنایی (Exception) رخ دهد که هیچ عبارت \f[CB]catch\f[R] متناظری برای آن در کل پشته فراخوانی ریسه پرتاب‌کننده وجود نداشته باشد، JVM معمولاً گزارش ردیابی استثنا (Stack Trace) را چاپ کرده و خارج می‌شود. اما در هنگام اجرا زیر نظر JDB، کنترل برنامه در همان نقطه پرتاب استثنا به JDB بازمی‌گردد. سپس می‌توانید با استفاده از دستور \f[CB]jdb\f[R] علت وقوع استثنا را بررسی و عیب‌یابی کنید. .PP با استفاده از دستور \f[CB]catch\f[R] می‌توانید برنامه را طوری تنظیم کنید که در زمان پرتاب سایر استثناها نیز متوقف شود؛ برای نمونه: \f[CB]catch\ java.io.FileNotFoundException\f[R] یا \f[CB]catch\f[R] \f[CB]mypackage.BigTroubleException\f[R]. هر استثنایی که نمونه‌ای از کلاس مشخص‌شده یا زیرکلاس‌های آن باشد، برنامه را در نقطه‌ای که استثنا پرتاب می‌شود متوقف می‌کند. .PP دستور \f[CB]ignore\f[R] اثر دستور قبلی \f[CB]catch\f[R] را باطل می‌کند. دستور \f[CB]ignore\f[R] باعث نمی‌شود که JVM استثناهای مشخص را نادیده بگیرد، بلکه فقط باعث نادیده گرفتن آن‌ها توسط دیباگر می‌شود. .SH "گزینه‌های دستور JDB (OPTIONS FOR THE JDB COMMAND)" .PP هنگامی که در خط فرمان به‌جای دستور \f[CB]java\f[R] از دستور \f[CB]jdb\f[R] استفاده می‌کنید، دستور \f[CB]jdb\f[R] بسیاری از گزینه‌های مشابه دستور \f[CB]java\f[R] را می‌پذیرد. .PP گزینه‌های زیر توسط دستور \f[CB]jdb\f[R] پشتیبانی می‌شوند: .TP .B \f[CB]\-help\f[R] پیام راهنما را نمایش می‌دهد. .RS .RE .TP .B \f[CB]\-sourcepath\f[R] \f[I]dir1\f[R]\f[CB]:\f[R]\f[I]dir2\f[R]\f[CB]:\f[R]... از مسیرهای مشخص‌شده برای جستجوی فایل‌های منبع استفاده می‌کند. اگر این گزینه مشخص نشود، مسیر پیش‌فرض نقطه (\f[CB]\&.\f[R]) به کار می‌رود. .RS .RE .TP .B \f[CB]\-attach\f[R] \f[I]address\f[R] دیباگر را با استفاده از مکانیزم اتصال پیش‌فرض به یک JVM در حال اجرا متصل می‌کند. .RS .RE .TP .B \f[CB]\-listen\f[R] \f[I]address\f[R] منتظر می‌ماند تا یک JVM در حال اجرا با رابط استاندارد به نشانی مشخص‌شده متصل شود. .RS .RE .TP .B \f[CB]\-listenany\f[R] منتظر می‌ماند تا یک JVM در حال اجرا با رابط استاندارد به هر نشانی در دسترس متصل گردد. .RS .RE .TP .B \f[CB]\-launch\f[R] برنامه مورد نظر را بلافاصله پس از راه‌اندازی دستور \f[CB]jdb\f[R] اجرا می‌کند. گزینه \f[CB]\-launch\f[R] نیاز به اجرای دستور \f[CB]run\f[R] را برطرف می‌سازد. برنامه اجرا شده و درست پیش از بارگذاری کلاس اولیه برنامه متوقف می‌شود. در این مرحله می‌توانید نقاط توقف لازم را تنظیم کرده و با دستور \f[CB]cont\f[R] اجرای برنامه را ادامه دهید. .RS .RE .TP .B \f[CB]\-listconnectors\f[R] رابط‌ها و متصل‌کننده‌های موجود در این JVM را فهرست می‌کند. .RS .RE .TP .B \f[CB]\-connect\f[R] \f[I]connector\-name\f[R]\f[CB]:\f[R]\f[I]name1\f[R]\f[CB]=\f[R]\f[I]value1\f[R].... با استفاده از متصل‌کننده نام‌برده و مقادیر آرگومان‌های ارائه‌شده، به JVM هدف متصل می‌شود. .RS .RE .TP .B \f[CB]\-dbgtrace\f[R] [\f[I]flags\f[R]] اطلاعات لازم برای خطایابی خود دستور \f[CB]jdb\f[R] را چاپ می‌کند. .RS .RE .TP .B \f[CB]\-tclient\f[R] برنامه را در کلاینت Java HotSpot VM اجرا می‌کند. .RS .RE .TP .B \f[CB]\-tserver\f[R] برنامه را در سرور Java HotSpot VM اجرا می‌کند. .RS .RE .TP .B \f[CB]\-J\f[R]\f[I]option\f[R] گزینه \f[I]option\f[R] را به JVM ارسال می‌کند؛ که در آن option یکی از گزینه‌های شرح‌داده‌شده در صفحه راهنمای راه‌انداز برنامه‌های جاوا است. برای نمونه، \f[CB]\-J\-Xms48m\f[R] مقدار حافظه اولیه هنگام راه‌اندازی را روی ۴۸ مگابایت تنظیم می‌کند. بخش \f[I]Overview of Java Options\f[R] در صفحه \f[B]java\f[R] را ببینید. .RS .RE .PP گزینه‌های زیر به فرآیند در حال خطایابی (Debuggee) ارسال می‌شوند: .TP .B \f[CB]\-v\f[R] یا \f[CB]\-verbose\f[R][\f[CB]:\f[R]\f[I]class\f[R]|\f[CB]gc\f[R]|\f[CB]jni\f[R]] حالت پرگویی (Verbose) را فعال می‌کند. .RS .RE .TP .B \f[CB]\-D\f[R]\f[I]name\f[R]\f[CB]=\f[R]\f[I]value\f[R] یک ویژگی سیستمی (System Property) را تنظیم می‌کند. .RS .RE .TP .B \f[CB]\-classpath\f[R] \f[I]dir\f[R] پوشه‌هایی را که برای جستجوی کلاس‌ها با دو نقطه (:) از هم جدا شده‌اند فهرست می‌کند. .RS .RE .TP .B \f[CB]\-X\f[R] \f[I]option\f[R] یک گزینه غیراستاندارد برای JVM هدف. .RS .RE .PP گزینه‌های دیگری نیز برای فراهم کردن سازوکارهای جایگزین جهت اتصال دیباگر به JVM مورد نظر پشتیبانی می‌شوند.