Налагодження Java програми, яку не можна зупинити
І само собою в код Java програми заздалегідь нічого спеціально не додано щодо засобів дебагу.
Адже простіше нікуди, правда? )
За екзотику я візьму хвилююче питання: "Скільки ж разів поспіль максимально випадуть орел і решка, ну і взагалі скільки разів вони просто випадуть?" Такий собі тест rand.nextInt(2). Які прогнози? Ставки приймаються…
Отримати відповідь допоможе дуже відомий і, до всього іншого, просто чудовий інструмент BTrace kenai.com/projects/btrace, що неодноразово згадується на хабрі в коментах, але на жаль жодного разу досі не описаний у постах.
Для його запуску варто розглянути пару способів: 1) любителям командного рядка - консольна утиліта, що завантажується з kenai.com/projects/btrace/downloads/directory/releases/release-1.2.4 (остання доступна версія) і запускається як
де PID - це ідентифікатор процесу (отримуваний, наприклад, через jps) TracingScript.java - трасуючий скрипт, з яким більш щільне знайомство буде трохи далі
2) любителям вікон пропонується використовувати плагін у VisualVM visualvm.java.net/download.html. Для чого заходимо в Tools-Plugins-Available Plugins клацаємо BTrace Workbench і тиснемо «Install», уважно читаємо ліцензію (хоча хто їх читає), добре, так і бути, без будь-яких коливань погоджуємося в цьому і наступних при все. І тепер, після успішної установки, в контекстному меню процесу, що цікавить, в VisualVM з'явився новий пункт «Trace Application. »

BTrace робить свою роботу покладаючись на алгоритм описаний в Java дуже подібному скрипті (також можна використовувати D-scriptи). Дуже подібне— оскільки це як би і сама що не наїсть Java, але все ж таки через те, що BTrace не змінює виконання програми, що трасується (я маю на увазі все-таки намагається не модифікувати її поведінку, тільки отримувати інформацію про виконання максимально слідуючи формату «read- only»), доводиться забути про безліч речей джави (починаючи зі створення нових об'єктів і закінчуючи ще багато чим, див.
А тепер скрипт (файл TracingScript.java)
Зрештою, запускаємо цей скрипт, тиснемо «Enter» в програмі, що чекає кидання монет, і отримуємо (у кого як, а в мене вийшло так):
total heads:531 total tails:469 max tail sequence:9 max head sequence:8
Загалом орел і решка трапилося випадали по 8 та 9 разів поспіль (хоча у мене за кілька запусків бувало і 10-11 разів). Бажаючим пропонується самостійно перевірити, наскільки отримане збігається з результатами формул теорії ймовірностей (щоб не заїхати тут у складну тему щодо способів генерації таких простих випадкових чисел).
Підбиваючи підсумки: BTrace дуже потужний інструмент, що дозволяє на льоту трасувати вельми і дуже дивовижні особливості виконання. У цій статті порушена лише вершина айсберга його розкішних здібностей (при бажанні хоч бери та пиши книгу), матеріал наводиться з метою викласти самі ази і якнайбільше зацікавити. Кого зачепило, дивіться докладніше тут kenai.com/projects/btrace/pages/UserGuide, перш за все, зверніть увагу на кількість анотацій і довгий список життєво корисних прикладів. Але все ж таки не забувайте - все відбувається на свій страх і ризик, бо застосовується BTracе для досягнення мети (вклинювання)трансформація Java класів, завжди може зіграти злий жарт.
І наостанок, про монети (фізика та й годі) — найчастіше монета не ідеально збалансована (зазвичай орел трохи важчий за решку), так що підкинути монету і отримати 50/50 у реальному житті не вдасться. Будьте пильні, беріть бік монети безпосередньо розумом. Та прибуде з вами успіх )