Отстраняване на грешки в 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 има нов елемент „Проследяване на приложението. »

може

BTrace върши работата си, като разчита на алгоритъм, описан в много подобен на Java скрипт (можете също да използвате D-скриптове). много подобно- тъй като това е като повечето Java нещо, но все пак поради факта, че BTrace не променя изпълнението на проследяваната програма (имам предвид, че все още се опитва да не променя поведението си, само за да получи информация за изпълнението, следвайки формата „само за четене“, доколкото е възможно), трябва да забравите за много неща на Java (започвайки със създаване на нови обекти и завършвайки с много повече от това, вижте kenai.com/projects/btrace/pages/User Ръководство за ограниченията на BTrace) и използвайте инструменти, предоставени директно от BTrace.

И сега скриптът (файл TracingScript.java)

В крайна сметка изпълняваме този скрипт, натискаме "Enter" в програмата в очакване на хвърлянето на монети и получаваме (някой го харесва, но за мен се оказа така):

общо глави: 531 общо опашки: 469 макс. опашка последователност: 9 макс. опашка последователност: 8

Като цяло се случи да паднат глави и опашки 8 и 9 пъти подред (въпреки че имах 10-11 пъти в няколко стартирания). Желаещите са поканени самостоятелно да проверят доколко полученото съвпада с резултатите от формулите на теорията на вероятностите (за да не навлизаме в сложна тема тук относно методите за генериране на такива прости случайни числа).

За да обобщим: BTrace е доста мощен инструмент, който ви позволява да проследявате много, много странни характеристики на изпълнение в движение. Тази статия засяга само върха на айсберга на нейните шикозни възможности (ако желаете, поне я вземете и напишете книга), материалът е предоставен, за да научи самите основи и да ви заинтересува колкото е възможно повече. За тези, които са пристрастени, вижте по-подробно тук kenai.com/projects/btrace/pages/UserGuide, преди всичко обърнете внимание на броя на анотациите и дългия списък от много, много полезни примери. Но все пак не забравяйте - всичко се случва на ваша собствена опасност и риск, защото BTrace използва за постигане на целта (вклиняване)трансформацията на Java класове винаги може да изиграе лоша шега.

И накрая, относно монетите (физика и нищо друго) - често монетата не е идеално балансирана (обикновено главите са малко по-тежки от опашките), така че няма да можете да хвърлите монета и да получите 50/50 в реалния живот. Бъдете нащрек, вземете страната на монетата директно с ума. Нека късметът е с вас )