問題タブ [javap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
659 参照

java - .class ファイルに LineNumberTable がありません

私たちの製品には、jdk 1.6.0._17 でコンパイルされた Java ソース ファイルがいくつかあります。それらのいずれかに例外があるときはいつでも、彼らは行番号を与えていません。

javap を使用して、jdk 1.6.0._17 コンパイル済みクラスの詳細を調べました。javap の出力に LineNumberTable がないため、例外スタックトレースに行番号が表示されません。

私の質問: 私の javac コマンドは、デバッグに関連するフラグ (-g:lines,vars,source など) を使用しません。そのため、クラス ファイルには少なくともデフォルトでソースと行番号の情報が含まれている必要があります。-g:none を使用してデバッグ情報の生成を無効にすることもありません。

LineNumberTable が .class ファイルで生成されない他の理由は何でしょうか?

これに関するヘルプは大歓迎です。

よろしく、 VK

0 投票する
0 に答える
213 参照

java - Java プログラムで端末コマンドを実行する

ターミナルで上記のコマンドを実行すると、出力にはクラス内の関数名とローカル変数が表示されます

ただし、上記の行を netbeans に入力して実行すると、ローカル変数が宣言されている関数名と行番号のみが表示されます。

同じコマンドの出力に変化があるのはなぜですか?

0 投票する
1 に答える
188 参照

scala - アサーションあり/なしでコンパイルするときのjavapの違い

せっかちな人のための Scala第 15 章 演習 10: メソッドに追加assert(n >= 0factorialます。factorial(-1)アサーションを有効にしてコンパイルし、例外がスローされることを確認します。アサーションなしでコンパイルします。何が起こるのですか?javapアサーション呼び出しに何が起こったかを確認するために使用します。

私のコード:

scalac最初に でコンパイルし、 を使用して検査しjavap Test、次に で再度コンパイルしscalac -Xelide-below MAXIMUMて同じコマンドで検査しました - 2 つの違いを見つけることができないようです。

プログラムを実行しようとすると、アサーションを使用してコンパイルすると例外がスローされ、アサーションを使用せずにコンパイルするとスタックオーバーフローエラーが発生することは理解していますが、違いがわかりませんjavap...

0 投票する
2 に答える
877 参照

java - javap -cはクラスファイルに対して何をしますか?

実際、質問は少し広いです。javacがjavaファイルをバイトコード(クラスファイル)にコンパイルすることを私は知っています。したがって、クラスファイルにはjvm命令などが含まれている必要があります。一方、これらの命令を確認する唯一の方法は、javap-cを使用してクラスファイルを逆コンパイルすることです。しかし、それは逆コンパイルではありませんよね?逆コンパイルすると、Javaファイルが生成されるためです。したがって、ここでの私の推測では、javacはjavaファイルを2回(実際には正しくありませんが、簡単にするために仮定します)、最初にjvm命令に、次にバイトコードにコンパイルするので、javap-cはバイトコードからjvm命令に逆コンパイルします。Jvmはバイトコードを理解するはずなので、命令を理解できません。私はここで少し混乱しています。誰かがここで何が起こっているのか説明できますか?

0 投票する
4 に答える
1156 参照

java - コンパイル済みクラス ファイルからのジェネリック型パラメーターの表示

メソッドとフィールドを元の (消去されていない) タイプで表示できるjavapに似たツールはありますか?

ソースコードをコンパイルすると、型情報が消去されることがわかっています。ただし、コンパイラは、ライブラリが既にクラス ファイルにコンパイルされている場合でも、ライブラリ メソッドへの呼び出しがシグネチャと一致するかどうかを判断できるため、何らかの方法で知る必要があります。したがって、少なくとも理論的には、型情報を取得できるはずです。

さらに検索したところ、次の回答が見つかりました: Javaクラスファイルにジェネリック型はどこに保存されていますか? getGeneric...()メソッド を教えてくれました。したがって、型情報は複雑な方法でクラスファイルに保存されているように見えますが、これらのメソッドを使用すると取得できます。しかし、これまでのところ、この情報を表示する (コマンド ライン) ツールは見つかりませんでした。

0 投票する
2 に答える
796 参照

recursion - 再帰的なjavapを実行し、結果を同じ名前のファイルに保存します

多くのディレクトリにある.classファイルを逆コンパイルしてから、すべてのファイルの出力を同じ名前(もちろん拡張子が異なる)のファイルに保存したいと思います。クラスパスを設定しようとしましたが、ディレクトリの1つが見つからないというエラーが表示されますが、それは意味がないので、何か間違ったことをしていると思います。(javap -classpath path / to / files / -c *)。

javapを使ってやりたいのですが、ライブラリやプログラムなどは使いたくありません。

0 投票する
1 に答える
2012 参照

java - javap classname を実行するときにプライベート メソッドが存在しない

javap classnameそのJavaファイルをコンパイルした後にコンソールで使用すると、プライベートメソッドが存在しないのはなぜですか?

0 投票する
1 に答える
4629 参照

java - javap.exe で Java .class ファイルを逆コンパイルしようとしています

逆コンパイルしたい .class ファイルがいくつかあります。これが私がしていることです: javap -c "C:\users\Richard\workspace\pruebas\bin\ClassName"そしていつも同じエラーがありますERROR:Could not find C:\users\Richard\workspace\pruebas\bin\ClassName

ただし、dirコマンドを使用してそのようなディレクトリに含まれるファイルを一覧表示すると、一覧表示されます。

皆さんは、何が原因であると考えられますか?man javap を実行しましたが、私が知る限り、構文は正しいです。

どんなアイデアでも大歓迎です。

0 投票する
1 に答える
12947 参照

java - Java:javapエラー:.classが見つかりませんでした

私のシステム(Ubuntu 10.04)では、javaは正常に実行されていますが、 javapコマンドを実行できません
。complileFooクラスがあり、javap -cFoo.classIを実行すると.classファイルパス
/home/ mahesh / java/opt
にあります。次のエラーメッセージが表示されます:エラー:Foo.classが見つかりませんでし た。環境変数を設定する必要がありますか、それを解決するために何か他のものを設定する必要があります。$ PATH変数のターゲットは次のとおりです:/ usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / games:/ usr / lib / jvm / bin/ ありがとう。





0 投票する
5 に答える
3745 参照

java - クラス名への.javaファイルパス

.javaファイルに作成されたクラスを取得する最も効率的な方法は何ですか?.javaファイルパスがあり、クラスのフルネームを取得する必要があります。

私は覚えているだけです:

  1. JavaCompilerでコンパイルします
  2. ファイルテキストを使用してEclipseASTParser(または別の)で解析する
  3. ファイルパスの一部からクラス名を推測しますが、これがすべての場合に機能するかどうかはわかりません
  4. どういうわけか、javapのようなツールを使用してください(これについては実際には考えていませんでした)

編集

私はこのファイルを次の場所に持っていますC:\myfolder\MyClass.java(パッケージとフォルダの関連付け規則は無視しましょう):

このファイルで宣言されているクラスのフルネームは次のとおりです。

  1. mypackage.mysubpackage.MyClass
  2. mypackage.mysubpackage.MyClass.MyInnerClass(これが正しいかどうかはわかりませんが、正しいふりをしましょう)

.javaファイルパス()しかない場合、どうすればこれらのクラスを取得できますC:\myfolder\MyClass.javaか?