نوشتن کد نیمی از کار است. هنوز باید ساخته شود تا به درستی کار کند. IDE ها و ابزارهای اشکال زدایی در این زمینه به ما کمک زیادی می کنند.
با استفاده از IntelliJ IDEA به عنوان مثال، پیشنهاد میکنم با این که چگونه میتوانیم بفهمیم وقتی کدمان اجرا میشود چه اتفاقی میافتد، آشنا شویم. اشکال زدایی یک موضوع گسترده است، بنابراین این بررسی مانند یک غواص غواصی عمیق را ارائه نمی دهد. اما امیدوارم غواصی مطمئن باشید)
بعد، باید پروژه ای را که انتخاب کرده ایم روی سرور اجرا کنیم. این فرآیند در یک مستند کوچک که در خود پروژه یافت می شود توضیح داده شده است:
پس از این، در گزارش سرور می توانیم نحوه اجرای پروژه جدید را مشاهده کنیم:
پس از آن به صفحه می رویم و باید صفحه ای را با فرم ثبت نام
اگر همه چیز خوب باشد، پیامی در این مورد در زیر خواهیم دید:
Enter را فشار دهید تا به منبع یافت شده بروید:
بنابراین، می بینیم که هنگام ثبت نام، MemberController.register فراخوانی می شود، ظاهراً این باید نوعی کلاس جاوا باشد. کلیک کنید
در واقع، چنین کلاسی وجود دارد. بیایید وارد آن شویم. ظاهراً باید یک روش ثبت نام وجود داشته باشد. کلیک کنید
در واقع ما آن را پیدا کردیم. ظاهراً، ثبت نام در اینجا، در MemberRegistration.register انجام می شود . Ctrl را فشار دهید و روی روش کلیک کنید تا به آن "fall through" وارد شود:
بیایید اکنون یک "نقطه شکست" یا نقطه شکست تعیین کنیم. این نشانگری است که می گوید اجرای کد کجا باید متوقف شود. در این لحظه ما این فرصت را خواهیم داشت که چیزهای جالب زیادی یاد بگیریم. برای قرار دادن آن، باید در سمت راست شماره خط کلیک کنید.
در صفحه http://localhost:8080/wildfly-hibernate4 فیلدها را پر کرده و روی دکمه ثبت کلیک کنید. نماد ایده در پانل چشمک می زند:
با رفتن به Idea، می بینید که اطلاعات جالب زیادی در پنل اشکال زدایی وجود دارد:
در اینجا می توانید مقدار فیلدهای شی را ببینید. به عنوان مثال، یک عضو ثبت نام شده شامل چه مواردی است:
عالی. دیگر چه کاری می توانیم انجام دهیم؟ میتوانیم منوی زمینه را باز کنیم و در آنجا Evaluate Expression را انتخاب کنیم (یا از طریق منوی Run -> Evaluate Expression). بهتر است، در کنترل پنل دیباگر:
این یک توانایی فوق العاده جالب در یک نقطه شکست است، دسترسی به هر چیزی که آن نقطه کد به آن دسترسی دارد، برای اجرای هر کدی که می تواند در آن نقطه اجرا شود. مثلا:
همچنین دکمه های کنترلی بر روی کنترل پنل دیباگر وجود دارد که وظیفه جابجایی کنترل جریان برنامه را بر عهده دارند. آیا این جادو نیست؟) با فشار دادن دکمه F8 (Step Out) بدون وارد کردن روش، کد را طی می کنیم. با فشردن F9، راه رفتن در خطوط کد با دیباگر را متوقف می کنیم و به دیباگر کنترل اجرای برنامه را می دهیم. اگر F7 (Step Into) را فشار دهیم، کد را مرور می کنیم و هر روشی را که در طول مسیر ملاقات می کنیم وارد می کنیم. به هر حال، توجه ویژه ای به این بلوک اطلاعاتی داشته باشید:
این موضوع رشته ای را که در آن قرار داریم و روش های موجود در پشته رشته فعلی را نشان می دهد. اما این همه ماجرا نیست. برای راحتی، می توانید تب فریم ها را باز کنید. برای انجام این کار باید فعال باشد:
اکنون در تب frames اطلاعاتی در مورد انتقال از روش به متد می بینیم، زیرا با استفاده از Step Into شروع به عبور از طریق کد کرد.
همانطور که می بینیم، ما همیشه نمی توانیم به جایی که برنامه در حال اجرا است منتقل شویم. ما اکنون در "getDelegate:469, AbstractEntityManager(org.jboss.as.jpa.container)" هستیم. اما در واقع در حال اجرا هستیم. این را کلاس مشخص شده توسط این نشان می دهد:
بیایید به این نگاه کنیم. همانطور که می دانیم به شی فعلی اشاره می کند. ما در TransactionScopedEntityManager هستیم. چرا Idea نمی تواند کد را به ما نشان دهد؟ واقعیت این است که IntelliJ Idea در حال حاضر از هیچ TransactionScopedEntityManager اطلاعی ندارد، زیرا به پروژه ما متصل نیست (در وابستگی های پروژه نیست). هنگامی که یک سرور برنامه در حال اجرا است، تعداد زیادی کتابخانه مختلف در داخل آن اجرا می شود. اما ما اطلاعات کمی در مورد آنها داریم، زیرا ... به طور کلی، ما نیازی به کاوش در درونیات نداریم، فقط به آن نیاز داریم تا کار کند. اما گاهی اوقات کار یا علاقه ورزشی ایجاب می کند. سپس، باید ایده را در مورد این کتابخانه اطلاع دهید تا بداند کد کلاس را از کجا دریافت کند.
حالا بیایید منتظر نتیجه باشیم. او شما را منتظر نمی گذارد)
اکنون، ما باید کد منبع آن را در جایی پیدا کنیم. و 2 گزینه وجود دارد:
حالا بیایید به توصیف وابستگی بپردازیم. در این صفحه می توانید کد منبع را دانلود کنید. عالی است، اکنون کد را دانلود کرده ایم. تنها چیزی که باقی می ماند اتصال کتابخانه است. بسیار ساده متصل می شود. باید تنظیمات پروژه را باز کنیم:
در آنجا "Libraries" را انتخاب می کنیم و کدهای منبع دریافتی را به بخش "منابع" اضافه می کنیم و در بخش "Classes" خود فایل jar کتابخانه را از پوشه WildFly نشان می دهیم که با استفاده از Far Manager پیدا کردیم. پس از این، هنگامی که از طریق F7 حرکت می کنیم، محتویات کلاس AbstractEntityManager و TransactionScopedEntityManager را خواهیم دید و همچنین از طریق جستجو بر اساس کلاس با استفاده از Ctrl+N در دسترس خواهد بود.
اکنون نقطه شکست تنها زمانی فعال می شود که نام ماکسیمیلیان باشد. با کلیک بر روی دکمه More، مجموعه گستردهای از تنظیمات برای Break Points در دسترس شما خواهد بود.
و یک قانون جدید برای نوع استثنای انتخاب شده ایجاد کنید:
به عنوان مثال، برای NPE:
#ویاچسلاو
معرفی
بخشی از نوشتن کد، اشکال زدایی آن است. و اگر وظایف شما شامل پشتیبانی از کد باشد، اشکال زدایی حتی بیشتر خواهد بود. خوب، علاوه بر این، با کمک اشکالزدایی، میتوانید کار کتابخانهها و چارچوبهای مورد استفاده را تا آنجا که میتوانید در جنگل کدهای دیگران غوطهور کنید، عمیقاً بررسی کنید. برای غواصی ما نیاز داریم:- محیط توسعه: رایگان IntelliJ Idea Community Edition
- Maven را نصب کرد
- WildFly Application Server 12.0.0.Final
- کد منبع برای نمونه های رسمی: کد منبع شروع سریع
bin\standalone.bat
\hibernate4\README.adoc
همانطور که در این مستندات نشان داده شده است، باید این دستور را در پوشه hibernate4 اجرا کنیم: mvn clean package wildfly:deploy
منتظر پیامی هستیم که ساخت با موفقیت انجام شد:
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 راه اندازی می کنیم:فرآیند اشکال زدایی
بیایید با ذخیره رکورد اشکال زدایی کنیم. برای این کار ابتدا باید در مورد مکانی که در آن کاوش خواهیم کرد تصمیم گیری کنیم. با قضاوت در پنجره، ما به یک دکمه "ثبت نام" نیاز داریم. بیایید آن را در کد پیدا کنیم. بنابراین، ما به یک عنصر نیاز داریم، آن باید متن: "ثبت نام". یا باید کاری با آن انجام دهد. کلیک کنیدCtrl+Shift+F
و برای ثبت نام در نقل قول جستجو کنید. می بینیم که یکی در index.xhtml وجود دارد.
Ctrl+N
و جستجو کنید:
Ctrl+F12
و به دنبال روش ثبت نام بگردید
اتصال کتابخانه های شخص ثالث برای اشکال زدایی
اول، ما خودمان باید بفهمیم که چه نوع کتابخانه ای است که باید متصل شود. اولین راه دشوارترین است - جستجو در اینترنت. سرعت و نتیجه یافتن نتیجه تا حد زیادی به نحوه مدیریت پروژه بستگی دارد. به عنوان مثال، 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" بگردید. یعنی چیزی شبیه این:
- فوق العاده مفید versioneye.com
- مخزن مرکزی Maven
GO TO FULL VERSION