問題タブ [jdi]
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.
java - JDI - 継承されたフィールドの ObjectReference.setValue()
JDI を使用してプログラムをデバッグしています。特定の ObjectReference のフィールドの値を変更しようとしています。私はそれを見つけることができるように、フィールドオブジェクトを持っています
ただし、使用してそのフィールドを変更することはできません
これは、このクラスまたはその直接のスーパークラス内のフィールドでのみ機能するため、階層の上位クラスは含まれません。
直接のスーパー クラスより上位のクラスで Field の値を変更することは可能ですか? もしそうなら、私はそうするための助けをいただければ幸いです!
ありがとうございました、
ディーン
編集: ObjectReference.setValue() を呼び出す行で次のエラーがスローされます:
java - Java JDI CommandLineLaunch が目的のクラスをロードしない
私は現在 Java の JDI を学んでおり、目的のプログラムを実行している仮想マシンを起動し、目的のプログラムを実行している起動した VM への接続を確立しようとしています。
これを行うために、起動コネクタ (「com.sun.jdi.CommandLineLaunch」) を使用しています。
起動コネクタに次の引数を与えます。
次に、でコネクタを起動しますVirtualMachine vm = connector.launch(args);
。ただし、次のコード フラグメントを使用してロードされたクラスのリストを出力すると、次のようになります。
Main2 クラスはリストにありません。
クラスパスの問題だと思いますが、これを機能させることができませんでした。Main2.class ファイルは、上記のコードが存在するクラスと同じディレクトリにあります。
誰が問題が何であるか知っていますか?
eclipse - com.sun.jdi.VMDisconnectedException: 仮想マシンから IOException を受け取りました
この例外を取り除こうとして問題が発生しています。「com.sun.jdi.SocketAttach」を接続コネクタとして使用してデバッガをリモートサーバーに接続するプログラムを作成し、接続が確立されたら、デバッグターゲットを追加しました。
私のコードは正常に動作していますが、サーバーへのアクティブなデバッグ接続を持つ Eclipse ワークスペースを閉じるたびにこの例外が発生します。次のようになります。
問題を調査したところ、VM が切断された後でもクライアントが VM に要求を送信すると、この例外がスローされることがわかりました。しかし、私の場合、サーバーにアプリケーションをデプロイしておらず、アプリケーションをデバッグしていませんでしたが、ワークスペースを閉じた後でもこの例外が発生します。
DebugEventListener を実装しようとしましたが、正しい軌道に乗っているかどうかはわかりません。この問題を解決する方法をご存知の方、アドバイスをお願いいたします。
ありがとう
android - Android ネイティブ コールで不満足なリンク エラーが発生する
Android アクティビティ クラスからネイティブ関数を呼び出そうとしていますが、その結果、満足できないリンク エラーが発生します。活動はこちら。
ネイティブ.h
ネイティブ.c:
カタログ
08-03 17:58:54.040: D/dalvikvm(4007): lib /data/app-lib/com.example.rockboost-1/libhellomodule.so 0xb1c88e70 を読み込もうとしています
08-03 17:58:54.050: D/dalvikvm(4007): 共有ライブラリ /data/app-lib/com.example.rockboost-1/libhellomodule.so 0xb1c88e70 を追加しました
08-03 17:58:54.050: D/dalvikvm(4007): JNI_OnLoad が /data/app-lib/com.example.rockboost-1/libhellomodule.so 0xb1c88e70 に見つかりません、init をスキップします
08-03 17:58:55.700: D/gralloc_goldfish(4007): GPU エミュレーションなしのエミュレーターが検出されました。08-03 17:59:15.040: W/dalvikvm(4007): ネイティブ Lcom/example/rockboost/MainActivity の実装が見つかりません;.hello:()V
08-03 17:59:15.050: D/AndroidRuntime(4007): VM をシャットダウンしています 08-03 17:59:15.050: W/dalvikvm(4007): threadid=1: キャッチされない例外で終了するスレッド (group=0xb1a4ed70)
08-03 17:59:15.130: E/AndroidRuntime(4007): 致命的な例外: メイン
08-03 17:59:15.130: E/AndroidRuntime (4007): プロセス: com.example.rockboost、PID: 4007
08-03 17:59:15.130: E/AndroidRuntime(4007): java.lang.UnsatisfiedLinkError: ネイティブ メソッドが見つかりません: com.example.rockboost.MainActivity.hello:()V
java:95) 08-03 17:59:15.130: E/AndroidRuntime(4007): android.os.Looper.loop(Looper.java:136) 08-03 17:59:15.130: E/AndroidRuntime(4007) : android.app.ActivityThread.main(ActivityThread.java:5026) 08-03 17:59:15.130: E/AndroidRuntime(4007): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 08-03 17 :59:15.130: E/AndroidRuntime(4007): java.lang.reflect.Method.invoke(Method.java:515) 08-03 17:59:15.130: E/AndroidRuntime(4007): com.android. internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777) 08-03 17:59:15.130: E/AndroidRuntime(4007): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) ) 08-03 17:59:15.130: E/AndroidRuntime(4007): dalvik.system.NativeStart.main(ネイティブ メソッド) 08-03 18:04:16.680: I/Process(4007): シグナルを送信しています。PID: 4007 SIG: 9 08-03 18:24:16.030: D/dalvikvm (5266):
08-03 17:58:54.040: D/dalvikvm(4007): ライブラリをロードしようとしています /data/app-lib/com.example.rockboost-1/libhellomodule.so 0xb1c88e70 08-03 17:58:54.050: D/ dalvikvm(4007): 共有ライブラリ /data/app-lib/com.example.rockboost-1/libhellomodule.so 0xb1c88e70 08-03 17:58:54.050 を追加しました: D/dalvikvm(4007): /data/ に JNI_OnLoad が見つかりませんapp-lib/com.example.rockboost-1/libhellomodule.so 0xb1c88e70、init 08-03 17:59:15.040 をスキップ: W/dalvikvm(4007): ネイティブ Lcom/example/rockboost/MainActivity の実装が見つかりません;.hello :()V
ライブラリがコンパイルされます。共有ライブラリをロードできたことをログで確認できます。ただし、ネイティブ呼び出しは機能せず、未飽和リンク エラーが発生しました
私が見る限り、命名規則は問題ないようです。ネイティブ関数を呼び出すときにのみエラーが発生するアプリケーションを起動できます。また、ライブラリが正しい CPU/アーキテクチャ用に構築されていることも確認しました。
アップデート
objdump -t を実行して、シンボル テーブルを確認しました。
関数はライブラリにありませんが、その理由はわかりません。ここに私の Android.mk ファイルがあります:
おそらく何か問題があるのでしょうが、どこにあるのかわかりません。
更新 2
私の Android.mk を修正し、別のライブラリを使用しました
正常にコンパイルされますが、同じ結果で、プログラムはライブラリ内の関数を見つけることができません。nm は、シンボルがそこにあることを示しています。
java - jdi呼び出し呼び出しを検出する方法は?
メソッドが JDI から呼び出された場合にスキップしたいロジックが関連付けられたブレークポイントがあります。
つまり、クライアントjvmで
ブレークポイントに関連付けられたコードを実行する必要がありますが、
デバッガーで jvm を実行すると、ロジックがスキップされ、コードが再開されます。
2 つの質問があります。
jdi メソッドの呼び出しは、クライアント JVM の Java コール スタックにどのように表示されますか?
呼び出しスタックを使用して呼び出しを検出できない場合、使用できる別の方法はありますか?
java - Java Debug Interface を使用してクラスを手動でロードする
バックグラウンド
Java コードを UML クラス図に変換するツールを作成しています。3 週間しかないので、このタスクを実行するためにパーサーを作成するのではなく、Java Debug Interface を使用するように先生に勧められました。
問題
クラスが VM によってロードされるタイミングを示す ClassPrepareEvents に登録しましたが (以下のコード スニペットを参照)、クラスは必要なときにのみロードされます。たとえば、GUI のボタンをクリックしてタイプ A のオブジェクトを作成する場合、ユーザーがボタンをクリックするまで A はロードされません。
これは自動化されたツールである必要があるため、ユーザーの操作なしでプログラム内のすべてのクラスをロードする必要があるため、これらすべてのクラスを手動でロードするにはどうすればよいでしょうか? または、私が見逃したAPIに何かがあり、これを行う別の方法がありますか?
前もって感謝します!:)
コードスニペット
java - JDI を使用しているときに (コードの各行の) ステートメント オブジェクトにアクセスする方法は?
JDI を使用して Java コードをステップ実行するプログラムを作成しています。これで、関心のあるすべての変数の値をいつでも検査できるようになりました。
ここで、(ステップ実行されている) コードの各行の性質を検査できるようにしたいと考えています。たとえば、プログラムは 2 つの変数を比較していますか? それは割り当てステートメントですか?
さまざまなクラスやチュートリアルを調べましたが、この概念を提示するクラスがあるかどうかを見つけることができませんでした. 私が見つけた最も近いものはLocationクラスでした...しかし、私が求めている情報はまだ含まれていません。
java - JDI を使用したハッシュテーブルからの要素の損失
これらのハッシュテーブルを宣言して初期化しました。
要素のペアを比較するために JDI を使用してハッシュテーブルから値を抽出したいのですが、パラメーターとして ArrayReference s0、s1 ArrayReference、パラメーター parameter1、パラメーター 2 パラメーターを持つメソッドがあります。
問題は、値の抽出中に要素が失われることです。この要素はメモリ内にありません。Java バージョン: 1.8.0_40
出力: http://i.imgur.com/BrqctVj.gif
誰も修正方法を知っていますか?