Что было бы более точным декомпилером, чем JAD для Eclipse, чтобы избавиться от <-Misaligned ->?
-
02-10-2019 - |
Вопрос
Я использовал JAD в течение многих лет, большинство из них с плагином JADCLIPSE к Eclipse, который делает его вполне полезным. Особенно с «Сокрушенным кодом для отладки», который позволяет видеть декомпилированного кода для любой строки в трассировке стека. Очень хорошо.
К сожалению, я видел все больше и больше, что <- mislignged -> комментарий пробирается, что, скорее всего, потому что JAD ожидает, что класс предотвращает, что ясно не является случай для библиотеки времени выполнения Java 6. Следовательно, при написании файла, и инструкция говорит: «Это строка 100», то написаны 99 пустых строк, и если затем следующая команда говорит: «Это для строки 10», то JAD не может перемотать, чтобы положить этот вывод там, но просто печатает комментарий, что это не в том месте.
Вот пример для httpurlconnection:
protected HttpURLConnection(URL url, Proxy proxy, Handler handler1)
{
/* <-MISALIGNED-> */ /* 603*/ super(url);
/* <-MISALIGNED-> */ /* 192*/ ps = null;
/* <-MISALIGNED-> */ /* 196*/ errorStream = null;
/* <-MISALIGNED-> */ /* 199*/ setUserCookies = true;
/* <-MISALIGNED-> */ /* 200*/ userCookies = null;
/* <-MISALIGNED-> */ /* 220*/ currentProxyCredentials = null;
/* <-MISALIGNED-> */ /* 221*/ currentServerCredentials = null;
/* <-MISALIGNED-> */ /* 222*/ needToCheck = true;
/* <-MISALIGNED-> */ /* 223*/ doingNTLM2ndStage = false;
/* <-MISALIGNED-> */ /* 224*/ doingNTLMp2ndStage = false;
/* <-MISALIGNED-> */ /* 226*/ tryTransparentNTLMServer = NTLMAuthentication.supportsTransparentAuth();
/* <-MISALIGNED-> */ /* 227*/ tryTransparentNTLMProxy = NTLMAuthentication.supportsTransparentAuth();
/
Вопрос сейчас, если есть еще один декомпилятор, который генерирует более точный вывод. Фактическое декомпиляция не должна быть чрезвычайно великой или что-то в чем-то, но мне очень нравится, когда он должен быть там, где представление трассировки стека Java ожидает, что он должен быть. Если он хорошо работает с JADCLIPSE, это еще лучше.
Решение
Проблема с форматированием для отладки приходит от jadclipse
и не из jad
. jad
не имеет этой способности.
То jadclipse
Плагин имеет небольшой код код в именах классов DebugAlignWriter
который делает это:
if((align = getAlignTarget(aLine)) != -1)
{
if(align < curLine)
{
if(curLine != 0)
{
out.write(10);
}
out.write("/* <-MISALIGNED-> */ ");
out.write(aLine);
curLine++;
}
else if(align == curLine)
{
out.write(aLine);
}
else
{
for(; align > curLine; curLine++)
{
out.write(10);
}
out.write(aLine);
}
}
В основном он пытается выровнять вывод из jad
.
Так что корневая причина в том, что jad
производит вывод, который не обязательно в порядке чтения. К сожалению, я не могу пролить свет на почему jad
действует таким образом. Согласно с jad
Помощь нет способа контролировать заказ.
Я заметил в jadclipse
что если вы установите JADCLIPSE-> Форматирование-> Не вставляйте новую строку перед открытием скобки - Так и будет уменьшать номер /* <-MISALIGNED-> */
Сегменты из-за природы того, как это работает.
Кроме того, если вы проверили Выходные поля до методов вариант может увеличить количество /* <-MISALIGNED-> */
Сегменты, так что избегайте этого.
Другие советы
JD-Eclipse. Это очень хороший декомпилятор, который также обрабатывает функции Java 7.
Еще не имеет «выровнять код для отладки», но я добавил один сам. Я использовал его за последний год.
Я также справляюсь с случаями, когда линия должна быть перемещена назад; Я до сих пор отмечаю это как неправильный, чтобы сигнализировать специальный случай, но, по крайней мере, он размещен на правой линии.
Если кто-то хочет дать ему попробовать, это можно скачать с здесь. Отказ Подробнее Внутри readme.txt
Я использую JAD с максимально возможным форматированием, а затем я использую команду формата Eclipse, так как я могу сделать его соответствовать моим предпочтительным стилям из предпочтений.