en de fr es ja it pt

13 апреля 2011 г.

Нестандартная отладка Java

Сейчас я работаю с одним обсуфицированным Java проектом, есть только готовый jar. К счастью, местами включены отладочные сообщения, что позволяет примерно понять что данный класс делает. Jad декомпилирует не идеально, почти весь код состоит из вещей виде "a.a().a().b(a)", и чтобы узнать какая именно "a" имеется ввиду приходится использовать Jasper. Но всеравно, это достаточно долго для сложных запутанных вызовов. Поэтому для первичного осмотра я придумал следующую вещь - запустить дебаггер jdb и после breakpoint'a пошагово пройти до интересующего момента (если он не очень далеко). Вручную набирать "stepi" сотни раз не очень приятно, поэтому мини-хак далее:

a.sh:
#!/bin/sh
sleep 3
echo "stop in someMysteryClass.()"
sleep 10
while [ 1 -gt 0 ]; do
echo "stepi";
perl -e 'select(undef, undef, undef, 0.3);' #Спим 0.3 сек
done;

Запуск java'ы примерно так:
java -cp super.jar -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n superUi

И дебаг c записью в mylog.txt
./a.sh | jdb -attach 8000 | tee mylog.txt

Комментариев нет:

Отправить комментарий