LoginSignup
h-kouji
@h-kouji (浩二郎 平田)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ソースなしjarファイルのデバックについて

解決したいこと

ソースなしjarファイルの中の処理をデバックでステップ実行しながら、変数値などを確認
したいと考えております。
しかし、ステップインで中に入ろうとしても入れません。

jarファイルのソースは入手できない前提で以下について教えてください。

  • ソースなしjarをデバック実行しようとすること自体が間違いか?
  • 上記がNoの場合、方法について教えていただきたい。

情報の過不足等あれば、指摘ください。

0

2Answer

ソースなしjarをデバック実行しようとすること自体が間違いか?

Yes:

 デバックは誤ったプログラムコードを発見することで、仕様に合致した、品質の高いプログラムコードに修正することに、その存在意義があります。

 もし、実行できたとしても、例外が発生した、ソースコードの行数ではなく、例外が発生した、メモリーアドレスを表示するだけです。(javaVMのアドレス)

尚、通常、リリース時に dubag=falseにするのは、一々、ソースコードの位置を確認しながら、実行すると、本来のサービスの応答性能に支障をきたすからです。

0

Comments

  1. @h-kouji

    Questioner

    ご回答いただきありがとうございます。

    デバックは誤ったプログラムコードを発見することで、仕様に合致した、品質の高いプログラム>コードに修正することに、その存在意義があります。

    おっしゃる通りだと思います。
    デバックの存在意義に沿わない使用方法になってしまうかもしれませんが、ソースなしjarファイルをデバックする方法はないでしょうか?あるのであれば、教えていただけると助かります。
    例えば、ソースなしJarからデコンパイルして、デコンパイルソースをjarにアタッチして、デバックをするみたいな方法がとれるのではないか?と考えています。

     私の想定している使い方として、バグを見つけるというよりは、処理中にどのような値を渡しているか?を確認したい。程度の使用を考えております。
    一番良いのは、Eclipseのアドイン等で簡単にできることが理想にはなります。

ソースなしJarからデコンパイルして、デコンパイルソースをjarにアタッチして、デバックをするみたいな方法がとれるのではないか?と考えています。

理論上はできなくはないですが、かなり難しいと思います。
デバッグビルドにはデバッグ用の情報が含まれておりデバッガがソースコードとの紐付けを行いますが、リリースビルドには含まれていないためデバッガがデコンパイルしたソースコードと紐付けてくれないのではないかと思います。

処理中にどのような値を渡しているか?を確認したい。程度の使用を考えております。

メソッド引数を確認したい程度であればAspectJなどを利用すれば出来るのではないかと思います。
public/protectedメソッドだけなどの制約はあると思いますが・・・

ちなみに何のjarを確認しようとしているかわかりませんが、市販製品等であればリバースエンジニアリング(デコンパイル等の解析行為)が禁止されている場合があるのでご注意ください。

0

Comments

  1. @h-kouji

    Questioner

    @mrbonjin
    ご回答いただきありがとうございます。

    理論上はできなくはないですが、かなり難しいと思います。

    やはりデコンパイルしたソースをアタッチしても、うまく紐づけてくれないですよね。

    市販製品等であればリバースエンジニアリング(デコンパイル等の解析行為)が禁止されている場合があるのでご注意ください。

    ご指摘ありがとうございます。気を付けて扱います。

Your answer might help someone💌