Дебаг

10 років тому я працював у парі разом із своїм тімлідом над розробкою кешу для БД. Продукт, що ми робили, було неможливо запускати локально. Процес виглядав наступним чином: робиш зміни, збираєш JAR, заливаєш його по FTP на application server, рестартуєш сервер через веб-консоль WebLogic, чекаєш 5 хв, перевіряєш як працює. Незручно та дуже довго, цикл зворотнього зв'язку надзвичайно повільний, робота нефективна. Все ускладнювалося ще й тим, що на декількох розробників видавали один сервер і доводилося синхронизувати ребути з колегами.

І ось, коли в нас знову щось не працює, тімлід робить наступне: додає в налаштування веблоджика якісь ключі та створює Remote Debug конфігурацію в IntelliJ. Заходить на веб-сторінку яка мала викликати нашу функціональність, натискає кнопку—і дебагер зупиняється в потрібному місці. Я не пам'ятаю, чи користувався дебагом до цього, але факт того, що ми можемо запустити щось на віддаленому сервері та зупитинити його, а потім отримати собі в IDE увесь контекст разом із всіма змінними, круто виніс мені мозок, адже тепер можна було повністю подивитися на те що відбувається у програмі.

Але найцікавіше було потім. Виявляється, що якщо підключитися дебагером до сервера, потім міняти код та перекомпілювати проект, IntelliJ запропонує зробити HotSwap та замінить код на сервері новим. Ось тут я прозрів остаточно. Величезна кількість розробників у тій компанії витрачали час (години, дні, тижні!) на ребути серверів, не перезборку та перепідкладання класів та джарників, на синхронізацію, а виявляється, що можна за секунду підсунути JVM свої зміни і тут же дивитися на результати.

Ця техніка суттєво підняла мою продуктивність, та була першим чому я вчив джунів які приходили до нас. Крім того, дебагер був найкращим способом зрозуміти, що приходить тобі ззовні. Продукт був дуже складним і дані, перед тим як потрапити у точку призначення, проходили мільйони шарів платформи та інших шматків бізнес-логіки, тому функція Evaluate Expression допомагала подивитися і внутрощі незнайомих об'єктів.

Цікаво, що досі я нечасто бачу людей, які підключені до запущеного апп-серверу (навіть локальному) і перепідкладають свої зміни. Натомість всі надають перевагу ребутам, або ще гірше, запускають CI/CD щоб протестувати свої зміни.


Сподобалось? Долучайтеся до мого телеграм каналу: https://t.me/full_of_hatred