4

私は何年もの間jadを使用してきましたが、これらのほとんどはEclipse用のJadclipseプラグインを使用しており、非常に使いやすくなっています。特に、スタックトレース内の任意の行の逆コンパイルされたコードを確認できる「デバッグ用のコードの整列」を使用します。非常に素晴らしい。

残念ながら、<-MISALIGNED->コメントが潜入しているのをますます見ています。これは、jadがクラスファイルが順番になっていることを期待しているためと考えられますが、Java6ランタイムライブラリの場合は明らかにそうではありません。したがって、ファイルを書き込むときに、命令が「これは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でうまく機能すれば、それはさらに良いことです。

4

3 に答える 3

2

デバッグのフォーマットに関する問題は、から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-> Formatting-> Do n't the newlinejadclipseを設定してから中括弧を開くと、動作の性質上、セグメントの数が減ることに気づきました。/* <-MISALIGNED-> */

また、 [メソッドの前に出力フィールド/* <-MISALIGNED-> */]オプションをオンにすると、セグメントの数が増える可能性があるため、避けてください。

于 2011-05-25T12:04:28.523 に答える
1

JD-Eclipseは、Java7の機能も処理する非常に優れた逆コンパイラです。

「デバッグ用のコードの整列」機能はまだありませんが、自分で追加しました。昨年使っています。

また、行を戻す必要がある場合も処理します。特別な場合を示すために、まだMISALIGNEDとしてマークしますが、少なくとも正しい行に配置されています。

誰かがそれを試してみたい場合は、ここからダウンロードできます。README.txt内の詳細

于 2012-06-01T05:41:05.260 に答える
0

可能な限りフォーマットを少なくしてjadを使用し、次にeclipseのformatコマンドを使用します。これは、設定から好みのスタイルに一致させることができるためです。

于 2010-09-10T12:23:34.330 に答える