Написати код – стать справи. Потрібно його змусити працювати правильно. У цьому нам дуже сильно допомагають IDE та засоби налагодження.
На прикладі IntelliJ IDEA пропоную познайомитися з тим, як ми можемо дізнатися, що відбувається з нашим кодом, коли він працює. Debug тема велика, тому даний огляд на глибоке занурення, немов дайвер, не пропонує. Але сподіваюся снорклінг точно )
Далі потрібно запустити вибраний проект на сервері. Цей процес описаний у невеликій документації, яку можна знайти в самому проекті:
Після цього в лозі сервера ми можемо побачити, як "задеплоївся" новий проект:
Після цього ми переходимо на сторінку
Якщо все добре, ми побачимо внизу про це повідомлення:
Натискаємо Enter для переходу до знайденого джерела:
Отже, бачимо, що з реєстрації викликається memberController.register Судячи з усього, це має бути деякий java клас. Натискаємо
Справді такий клас є . Переходимо до нього. Мабуть, тут має бути метод register. Натискаємо
Справді знайшли. Зважаючи на все, реєстрація відбувається тут, в memberRegistration.register . Натискаємо Ctrl і клацаємо за методом, щоб «провалитися» в нього:
Давайте тепер поставимо точку зупинки або Break Point. Це такий маркер, який каже, де виконання коду має призупинитись. Ми зараз отримаємо можливість дізнатися багато цікавого. Щоб його поставити потрібно клікнути в місце правіше за номер рядка.
На сторінці http://localhost:8080/wildfly-hibernate4 заповнюємо поля та натискаємо кнопку Register. Значок ідеї на панелі блимає:
Перейшовши в Idea видно, що на панелі налагодження багато цікавої інформації:
Тут можна переглянути значення полів об'єкта. Наприклад, з чого складається Member, що реєструється:
Чудово. Що ми можемо зробити? Ми можемо відкрити контекстне меню та вибрати там Evaluate Expression (або через меню Run -> Evaluate Expression). А ще краще на панелі керування дебаггером:
Це супер чудова можливість у точці зупинки, маючи доступ до всього, до чого є доступ до цього місця коду, виконати будь-який код, який можна було б виконати у цьому місці. Наприклад:
На панелі керування дебаггером є також кнопки керування, які відповідають за те, куди необхідно перемістити керування ходом виконання програми. Чи не так, магія?) Натискаючи кнопку F8 (Step Out) ми ходимо за кодом без заходів у методи. Натиснувши F9 ми припиняємо ходити рядками коду дебаггером, а віддаємо дебаггером керування ходом виконання програми. Якщо ми натиснемо F7 (Step Into), то ми підемо за кодом із заходом у кожний метод, який зустрінемо на своєму шляху. До речі, зверніть особливу увагу на цей інформаційний блок:
Тут показаний потік, у якому ми і методи у стеку поточного потоку. Але це ще не все. Для зручності можна відкрити вкладку кадрів. Для цього вона має бути включена:
Тепер вкладці фреймів бачимо інформацію про перехід від методу до методу, т.к. почали ходити за кодом за допомогою Step Into.
Як бачимо, який завжди нас може перекинути туди, де зараз виконання програми. Ми зараз перебуваємо в «getDelegate:469, AbstractEntityManager (org.jboss.as.jpa.container)». Але насправді ми в реалізації. Про це свідчить клас, зазначений у цьому:
Дивимося на це. Як відомо, він вказується на поточний об'єкт. Ми в TransactionScopedEntityManager. Чому ж Idea нам не може показати код? Справа в тому, що IntelliJ Idea зараз не знає ні про яку TransactionScopedEntityManager, т.к. він не підключений до нашого проекту (його немає у залежностях проекту). Коли працює сервер додатків, то всередині нього крутиться багато всяких бібліотек. А про них відомо дуже мало, т.к. у загальному випадку нам не потрібно копатися у нутрощах, нам потрібно, щоб воно просто працювало. Але іноді цього потребує робота чи спортивний інтерес. Тоді треба про цю бібліотеку повідомляти Idea, щоб вона знала, де брати код класів.
Тепер, чекаємо на результат. Він не змусить себе чекати)
Тепер нам треба десь знайти вихідний код для нього. І тут є 2 варіанти:
Тепер переходимо до опису залежності. На цій сторінці можна завантажити вихідний код. Відмінно, тепер код у нас завантажений. Залишилось підключити бібліотеку. Підключається вона дуже просто. Нам потрібно відкрити налаштування проекту:
Там вибираємо "Libraries" і в розділ "Sources" додаємо отримані вихідні коди, а в розділі "Classes" вказуємо сам jar файл бібліотеки з каталогу WildFly, який нами був знайдений за допомогою Far Manager'а. Після цього ми побачимо при переході по F7 вміст класу AbstractEntityManager і TransactionScopedEntityManager, а також стане доступним через пошук за класами через Ctrl+N.
Тепер точка зупинки буде працювати тільки тоді, коли ім'я буде Maximilian. На кнопці More Вам будуть доступні розширений набір для Break Point'ів.
І створити нове правило для вибраного типу виключення:
Наприклад, для NPE:
#Viacheslav
Вступ
Частина написання коду – його налагодження, дебаг (англ. debug). А якщо в завдання входить підтримка коду – налагодження буде ще більшим. Ну і крім того, за допомогою налагодження можна дослідити роботу бібліотек і фреймворків, що використовуються, так глибоко, як тільки зможете зануритися в нетрі чужого коду. Для нашого занурення нам знадобиться:- Середа розробки: Безкоштовна IntelliJ Idea Community Edition
- Встановлений Maven
- Сервер програм WildFly 12.0.0.Final
- Вихідний код офіційних прикладів: Quick Start Source Code
bin\standalone.bat
(або standalone.sh для систем *nix). (!) Важливо запустити з параметром --debug Очікуємо, коли сервер стартує. Нам напишуть, що він started in та вкажуть час. Виглядатиме це приблизно так:
\hibernate4\README.adoc
Як і зазначено в цій документації, нам потрібно в каталозі hibernate4 виконати команду: mvn clean package wildfly:deploy
Очікуємо, коли нам напишуть, що збірка виконана успішно:
http://localhost:8080/wildfly-hibernate4
і у нас має відобразитися сторінка з формою " Member Registration ". Отже, наша підготовка до експериментів виконана і ми можемо починати)) Попереду для наочності буде багато картинок, так що приготуйтеся)
Remote Debug
Отже, нам потрібно налаштувати режим Debug, щоб наша IDE керувала виконання коду на сервері додатків. IntelliJ Idea поставляється у двох варіантах: безкоштовний (Community) та платний (Ultimate). Останній можна офіційно спробувати як EAP. У Ultimate версії все просто – сервер додатків можна запускати відразу з IDE у режимі дебагу. А ось у Community версії треба небагато дій зробити вручну. Тому, розглянемо випадок складніше, тобто. налаштування в Community версії. У Community версії є деякі обмеження. Зокрема, з неї не можна запускати сервер додатків. Але можна налаштувати віддалену налагодження (Remote Debug), коли десь окремо є запущений сервер із потрібним нам додатком. Скористайтеся описом налаштування звідси: Remote debug Wildfly in IntelliJ Idea community edition(Налаштування Remote Run Configuration для 8787 порту). Після налаштування запускаємо в Debug режимі нашу нову конфігурацію:Процес Debug'а
Давайте «відпочинимо» збереження запису. Для цього треба спочатку визначитися з місцем, де ми будемо досліджувати. Судячи з вікна, нам потрібна кнопка Register. Давайте знайдемо її у коді. Отже, нам потрібний елемент, у нього має бути текст: "Register". Або вона має якось ставитися до цього. НатискаємоCtrl+Shift+F
та шукаємо Register у лапках. Бачимо, що така є на index.xhtml.
Ctrl+N
, шукаємо:
Ctrl+F12
та шукаємо метод register
Підключення сторонніх бібліотек для дебагу
Спершу нам самим потрібно зрозуміти, що ж це за бібліотека, яку потрібно підключити. Перший шлях він найважчий – шукати в інтернеті. Швидкість та результат знаходження результату сильно залежать від того, наскільки добре вели проект. Наприклад, WildFly має відкритий репозиторій. Тому, при пошуку в куті "TransactionScopedEntityManager" ми вийдемо на https://github.com/wildfly/wildfly/tree/master/jpa/subsystem і знайдемо, що нам потрібен wildfly-jpa. Другий спосіб – правильний. Де лежить сервер, там шукати. У цьому можуть допомогти різні засоби. Наприклад, на Windows це може бути Far Manager . Далі приклад алгоритму пошуку наведено на ньому. Встановивши та запустивши його, перемикаємось за допомогою Tabна одну із вкладок, за допомогоюAlt+F1
для лівої вкладки або Alt+F2
для правої та вибираємо потрібний нам розділ на жорсткому диску. Цілком можливо, що Far Manager після установки відкритий каталог самого Far Manager. Щоб перейти в корінь диска, натисніть Ctrl + \
. За допомогою Alt+F
відкриваємо віконце пошуку, починаємо набирати назву каталозі та натискаємо Enter після того, як каталог знайдено. Цей пошук хитрий і виділяє каталоги, які збігаються з текстом пошуку. Якщо вводяться символи, для яких немає папок, такі символи не можна ввести. Переходимо у каталог сервера додатків. Допустимо, ми не знаємо, де на сервері лежать модулі. Можливо, Ви взагалі вперше чуєте про якийсь там WildFly. Тому, натискаємо одразу тутAlt+F7
для пошуку файлів. Отже, логіка підказує: нам потрібний файл із бібліотекою. Тобто нам потрібне jar. Всередині повинен бути клас TransactionScopedEntityManager. Т.к. клас = файл, то шукаємо по «містить». Тобто якось так:
- Супер корисний versioneye.com
- Центральний Maven Repository
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ