JavaRush /وبلاگ جاوا /Random-FA /IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی
Viacheslav
مرحله

IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی

در گروه منتشر شد
نوشتن کد نیمی از کار است. هنوز باید ساخته شود تا به درستی کار کند. IDE ها و ابزارهای اشکال زدایی در این زمینه به ما کمک زیادی می کنند.
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 1
با استفاده از IntelliJ IDEA به عنوان مثال، پیشنهاد می‌کنم با این که چگونه می‌توانیم بفهمیم وقتی کدمان اجرا می‌شود چه اتفاقی می‌افتد، آشنا شویم. اشکال زدایی یک موضوع گسترده است، بنابراین این بررسی مانند یک غواص غواصی عمیق را ارائه نمی دهد. اما امیدوارم غواصی مطمئن باشید)

معرفی

بخشی از نوشتن کد، اشکال زدایی آن است. و اگر وظایف شما شامل پشتیبانی از کد باشد، اشکال زدایی حتی بیشتر خواهد بود. خوب، علاوه بر این، با کمک اشکال‌زدایی، می‌توانید کار کتابخانه‌ها و چارچوب‌های مورد استفاده را تا آنجا که می‌توانید در جنگل کدهای دیگران غوطه‌ور کنید، عمیقاً بررسی کنید. برای غواصی ما نیاز داریم: ابتدا آرشیو دانلود شده را با کد منبع شروع سریع باز کنید. IntelliJ Idea را راه اندازی کنید و " پروژه جدید از منابع موجود " را ایجاد کنید. فایل pom.xml را در زیر شاخه hibernate4 انتخاب کنید . هنگام وارد کردن، " وارد کردن پروژه های Maven به طور خودکار " را مشخص کنید و ایجاد پروژه را کامل کنید و سایر تنظیمات را بدون تغییر باقی بگذارید. در حالی که پروژه وارد می شود، سرور برنامه WildFly دانلود شده را در فهرستی از حالت فشرده خارج کنید. سرور را با استفاده از فایل (یا standalone.sh برای سیستم های *nix) راه اندازی می کنیم. (!) مهم است که با پارامتر --debug شروع کنیم.ما منتظر شروع سرور هستیم. آنها برای ما می نویسند که شروع شده و زمان را نشان می دهند. چیزی شبیه به این خواهد بود: bin\standalone.bat
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 2
بعد، باید پروژه ای را که انتخاب کرده ایم روی سرور اجرا کنیم. این فرآیند در یک مستند کوچک که در خود پروژه یافت می شود توضیح داده شده است: \hibernate4\README.adoc همانطور که در این مستندات نشان داده شده است، باید این دستور را در پوشه hibernate4 اجرا کنیم: mvn clean package wildfly:deploy منتظر پیامی هستیم که ساخت با موفقیت انجام شد:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 3
پس از این، در گزارش سرور می توانیم نحوه اجرای پروژه جدید را مشاهده کنیم:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 4
پس از آن به صفحه می رویم و باید صفحه ای را با فرم ثبت نامhttp://localhost:8080/wildfly-hibernate4 مشاهده کنیم . بنابراین، آماده‌سازی ما برای آزمایش‌ها کامل شده است و می‌توانیم شروع کنیم)) تصاویر زیادی برای وضوح وجود دارد، پس آماده شوید)

اشکال زدایی از راه دور

بنابراین، ما باید حالت Debug را طوری پیکربندی کنیم که IDE ما اجرای کد روی سرور برنامه را کنترل کند. IntelliJ Idea در دو نسخه ارائه می شود: رایگان (Community) و پولی (Ultimate). مورد دوم را می توان به صورت رسمی در قالب EAP امتحان کرد. در نسخه Ultimate، همه چیز ساده است - سرور برنامه را می توان مستقیماً از IDE در حالت اشکال زدایی راه اندازی کرد. اما در نسخه Community باید چند کار را به صورت دستی انجام دهید. بنابراین، بیایید یک مورد پیچیده تر را در نظر بگیریم، یعنی. تنظیم در نسخه انجمن نسخه انجمن محدودیت هایی دارد. به ویژه، شما نمی توانید یک سرور برنامه را از آن اجرا کنید. اما شما می توانید اشکال زدایی از راه دور (Remote Debug) را تنظیم کنید، زمانی که در جایی جداگانه یک سرور در حال اجرا با برنامه مورد نیاز ما وجود دارد. بیایید از شرح تنظیمات از اینجا استفاده کنیم: اشکال زدایی از راه دور Wildfly در نسخه جامعه IntelliJ Idea (تنظیم Remote Run Configuration برای پورت 8787). پس از پیکربندی، پیکربندی جدید خود را در حالت Debug راه اندازی می کنیم:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 5
اگر همه چیز خوب باشد، پیامی در این مورد در زیر خواهیم دید:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 6

فرآیند اشکال زدایی

بیایید با ذخیره رکورد اشکال زدایی کنیم. برای این کار ابتدا باید در مورد مکانی که در آن کاوش خواهیم کرد تصمیم گیری کنیم. با قضاوت در پنجره، ما به یک دکمه "ثبت نام" نیاز داریم. بیایید آن را در کد پیدا کنیم. بنابراین، ما به یک عنصر نیاز داریم، آن باید متن: "ثبت نام". یا باید کاری با آن انجام دهد. کلیک کنید Ctrl+Shift+Fو برای ثبت نام در نقل قول جستجو کنید. می بینیم که یکی در index.xhtml وجود دارد.
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 7
Enter را فشار دهید تا به منبع یافت شده بروید:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 8
بنابراین، می بینیم که هنگام ثبت نام، MemberController.register فراخوانی می شود، ظاهراً این باید نوعی کلاس جاوا باشد. کلیک کنید Ctrl+Nو جستجو کنید:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 9
در واقع، چنین کلاسی وجود دارد. بیایید وارد آن شویم. ظاهراً باید یک روش ثبت نام وجود داشته باشد. کلیک کنید Ctrl+F12و به دنبال روش ثبت نام بگردید
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 10
در واقع ما آن را پیدا کردیم. ظاهراً، ثبت نام در اینجا، در MemberRegistration.register انجام می شود . Ctrl را فشار دهید و روی روش کلیک کنید تا به آن "fall through" وارد شود:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 11
بیایید اکنون یک "نقطه شکست" یا نقطه شکست تعیین کنیم. این نشانگری است که می گوید اجرای کد کجا باید متوقف شود. در این لحظه ما این فرصت را خواهیم داشت که چیزهای جالب زیادی یاد بگیریم. برای قرار دادن آن، باید در سمت راست شماره خط کلیک کنید.
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 12
در صفحه http://localhost:8080/wildfly-hibernate4 فیلدها را پر کرده و روی دکمه ثبت کلیک کنید. نماد ایده در پانل چشمک می زند:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 13
با رفتن به Idea، می بینید که اطلاعات جالب زیادی در پنل اشکال زدایی وجود دارد:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 14
در اینجا می توانید مقدار فیلدهای شی را ببینید. به عنوان مثال، یک عضو ثبت نام شده شامل چه مواردی است:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 15
عالی. دیگر چه کاری می توانیم انجام دهیم؟ می‌توانیم منوی زمینه را باز کنیم و در آنجا Evaluate Expression را انتخاب کنیم (یا از طریق منوی Run -> Evaluate Expression). بهتر است، در کنترل پنل دیباگر:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 16
این یک توانایی فوق العاده جالب در یک نقطه شکست است، دسترسی به هر چیزی که آن نقطه کد به آن دسترسی دارد، برای اجرای هر کدی که می تواند در آن نقطه اجرا شود. مثلا:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 17
همچنین دکمه های کنترلی بر روی کنترل پنل دیباگر وجود دارد که وظیفه جابجایی کنترل جریان برنامه را بر عهده دارند. آیا این جادو نیست؟) با فشار دادن دکمه F8 (Step Out) بدون وارد کردن روش، کد را طی می کنیم. با فشردن F9، راه رفتن در خطوط کد با دیباگر را متوقف می کنیم و به دیباگر کنترل اجرای برنامه را می دهیم. اگر F7 (Step Into) را فشار دهیم، کد را مرور می کنیم و هر روشی را که در طول مسیر ملاقات می کنیم وارد می کنیم. به هر حال، توجه ویژه ای به این بلوک اطلاعاتی داشته باشید:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 18
این موضوع رشته ای را که در آن قرار داریم و روش های موجود در پشته رشته فعلی را نشان می دهد. اما این همه ماجرا نیست. برای راحتی، می توانید تب فریم ها را باز کنید. برای انجام این کار باید فعال باشد:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 19
اکنون در تب frames اطلاعاتی در مورد انتقال از روش به متد می بینیم، زیرا با استفاده از Step Into شروع به عبور از طریق کد کرد.
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 20
همانطور که می بینیم، ما همیشه نمی توانیم به جایی که برنامه در حال اجرا است منتقل شویم. ما اکنون در "getDelegate:469, AbstractEntityManager(org.jboss.as.jpa.container)" هستیم. اما در واقع در حال اجرا هستیم. این را کلاس مشخص شده توسط این نشان می دهد:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 21
بیایید به این نگاه کنیم. همانطور که می دانیم به شی فعلی اشاره می کند. ما در TransactionScopedEntityManager هستیم. چرا Idea نمی تواند کد را به ما نشان دهد؟ واقعیت این است که IntelliJ Idea در حال حاضر از هیچ TransactionScopedEntityManager اطلاعی ندارد، زیرا به پروژه ما متصل نیست (در وابستگی های پروژه نیست). هنگامی که یک سرور برنامه در حال اجرا است، تعداد زیادی کتابخانه مختلف در داخل آن اجرا می شود. اما ما اطلاعات کمی در مورد آنها داریم، زیرا ... به طور کلی، ما نیازی به کاوش در درونیات نداریم، فقط به آن نیاز داریم تا کار کند. اما گاهی اوقات کار یا علاقه ورزشی ایجاب می کند. سپس، باید ایده را در مورد این کتابخانه اطلاع دهید تا بداند کد کلاس را از کجا دریافت کند.

اتصال کتابخانه های شخص ثالث برای اشکال زدایی

اول، ما خودمان باید بفهمیم که چه نوع کتابخانه ای است که باید متصل شود. اولین راه دشوارترین است - جستجو در اینترنت. سرعت و نتیجه یافتن نتیجه تا حد زیادی به نحوه مدیریت پروژه بستگی دارد. به عنوان مثال، WildFly یک مخزن باز دارد. بنابراین وقتی «TransactionScopedEntityManager» را در گوگل جستجو می کنیم، به https://github.com/wildfly/wildfly/tree/master/jpa/subsystem می رویم و متوجه می شویم که به wildfly-jpa نیاز داریم. روش دوم صحیح است. سرور کجاست، آنجا را نگاه کنید. ابزارهای مختلف می توانند به این امر کمک کنند. به عنوان مثال، در ویندوز می تواند Far Manager باشد . در زیر نمونه ای از الگوریتم جستجو آورده شده است. پس از نصب و راه اندازی آن، از Tab برای جابجایی به یکی از تب ها، با استفاده از Alt+F1زبانه سمت چپ یا Alt+F2سمت راست استفاده کنید و پارتیشن مورد نیاز خود را در هارد دیسک انتخاب کنید. این امکان کاملا وجود دارد که خود دایرکتوری Far Manager پس از نصب در Far Manager باز باشد. برای رفتن به ریشه دیسک، را فشار دهید Ctrl + \. با استفاده از، Alt+Fپنجره جستجو را باز کنید، نام دایرکتوری را تایپ کنید و پس از یافتن دایرکتوری Enter را فشار دهید. این جستجو هوشمندانه است و دایرکتوری هایی را که با متن جستجو مطابقت دارند برجسته می کند. اگر کاراکترهایی را وارد کنید که هیچ پوشه ای برای آنها وجود ندارد، چنین کاراکترهایی نمی توانند وارد شوند. به این ترتیب به دایرکتوری سرور برنامه می رویم. فرض کنید نمی دانیم ماژول ها در کجای سرور قرار دارند. شاید این اولین بار در زندگی شما باشد که در مورد نوعی WildFly می شنوید. Alt+F7بنابراین، برای جستجوی فایل‌ها ، بلافاصله اینجا را کلیک کنید . بنابراین، منطق حکم می کند: ما به یک فایل با کتابخانه نیاز داریم. یعنی به یک کوزه نیاز داریم. باید یک کلاس TransactionScopedEntityManager در داخل وجود داشته باشد. زیرا class = file، سپس به دنبال "contains" بگردید. یعنی چیزی شبیه این:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 22
حالا بیایید منتظر نتیجه باشیم. او شما را منتظر نمی گذارد)
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 23
اکنون، ما باید کد منبع آن را در جایی پیدا کنیم. و 2 گزینه وجود دارد: شاید از دومی استفاده کنیم. بیایید آنجا پیدا کنیم:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 24
حالا بیایید به توصیف وابستگی بپردازیم. در این صفحه می توانید کد منبع را دانلود کنید. عالی است، اکنون کد را دانلود کرده ایم. تنها چیزی که باقی می ماند اتصال کتابخانه است. بسیار ساده متصل می شود. باید تنظیمات پروژه را باز کنیم:
IntelliJ IDEA and Debug: نه غواصی، بلکه غواصی - 25
در آنجا "Libraries" را انتخاب می کنیم و کدهای منبع دریافتی را به بخش "منابع" اضافه می کنیم و در بخش "Classes" خود فایل jar کتابخانه را از پوشه WildFly نشان می دهیم که با استفاده از Far Manager پیدا کردیم. پس از این، هنگامی که از طریق F7 حرکت می کنیم، محتویات کلاس AbstractEntityManager و TransactionScopedEntityManager را خواهیم دید و همچنین از طریق جستجو بر اساس کلاس با استفاده از Ctrl+N در دسترس خواهد بود.

نقاط شکست با شرایط

بیایید اکنون به نقاط شکست برگردیم. گاهی اوقات، ما همیشه نمی خواهیم متوقف شویم، اما فقط تحت شرایطی. چه باید کرد؟ و در اینجا IDE ما نیز به ما کمک خواهد کرد. با قرار دادن یک Break Point می توانیم یک شرط به آن اختصاص دهیم. به عنوان مثال، یک نقطه قرار دهید و روی آن راست کلیک کنید:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 26
اکنون نقطه شکست تنها زمانی فعال می شود که نام ماکسیمیلیان باشد. با کلیک بر روی دکمه More، مجموعه گسترده‌ای از تنظیمات برای Break Points در دسترس شما خواهد بود.

امتیازات شکست در استثناها

گاهی اوقات ممکن است یک خطا دریافت کنیم و بخواهیم آن را از کجا ردیابی کنیم. سپس می‌توانیم نقطه شکست را نه در یک خط کد خاص، بلکه در جایی که استثنا پرتاب می‌شود، اضافه کنیم. برای انجام این کار، باید لیست تمام نقاط شکست را گسترش دهید:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 27
و یک قانون جدید برای نوع استثنای انتخاب شده ایجاد کنید:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 28
به عنوان مثال، برای NPE:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 29

کلاس های HotSwap

دیباگر چیز شگفت انگیزی است. علاوه بر اشکال زدایی، امکان تغییر کلاس ها را نیز به شما می دهد! بله، منابع (مثلاً صفحات xhtml) به این راحتی قابل تغییر نیستند. اما کد کلاس‌های جاوا را می‌توان در لحظه جایگزین کرد (به آن Hot Swap می‌گویند). برای این کار کافیست کلاس را با دیباگر متصل تغییر دهید و Run -> Reload Changed Classes را اجرا کنید. بررسی مفید در مورد این موضوع: 4 روش رایگان برای تبادل کد در JVM

نتیجه

دیباگر ابزار قدرتمندی است که به توسعه‌دهنده اجازه می‌دهد تا به اعماق کد در حال اجرا نفوذ کند و آن را با تمام جزئیات مطالعه کند. این به شما امکان می دهد گیج کننده ترین خطاها را تصحیح کنید. همچنین به شما این امکان را می دهد که درک بهتری از نحوه عملکرد کتابخانه های خاص داشته باشید. حتی چنین بررسی کوتاهی کاملاً چشمگیر بود، اما امیدوارم مفید و جالب باشد. اگر کسی به این ماده علاقه مند است، می تواند شیرجه را با استفاده از لینک های زیر ادامه دهد:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 30
#ویاچسلاو
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION