Сейчас я работаю с одним обсуфицированным 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
Комментариев нет:
Отправить комментарий