0
マルチスレッドを含むJavaクラスを作成します。各スレッドは異なるJNIインターフェイスを呼び出します。私は、gdb -p(pidはJavaプロセスID)を使ってJNIをデバッグしようとしています。しかし、特定のJNIインターフェースがどのスレッドに対応しているのかわかりません。この場合、gdbのJNIコードをどのようにデバッグできますか?Linuxでマルチジャンクスレッドから呼び出されるJNIをデバッグする方法
マルチスレッドを含むJavaクラスを作成します。各スレッドは異なるJNIインターフェイスを呼び出します。私は、gdb -p(pidはJavaプロセスID)を使ってJNIをデバッグしようとしています。しかし、特定のJNIインターフェースがどのスレッドに対応しているのかわかりません。この場合、gdbのJNIコードをどのようにデバッグできますか?Linuxでマルチジャンクスレッドから呼び出されるJNIをデバッグする方法
gdbでJVMプロセスに接続するだけで簡単に接続できます。
は、Javaがgdb /proc/PID/exe PID
デバッグコード
jps
9340 Jps
9278 HelloWorld
...
gdb /proc/9278/exe 9278
...
(gdb) break mode_1
Breakpoint 1 at 0x2b8126cd97b6: file c/recipeNo024_HelloWorld.c, line 6.
(gdb) break mode_2
Breakpoint 2 at 0x2b8126cd97c8: file c/recipeNo024_HelloWorld.c, line 10.
(gdb) break mode_3
Breakpoint 3 at 0x2b8126cd97da: file c/recipeNo024_HelloWorld.c, line 14.
(gdb) cont
...
...
[Switching to Thread 0x2b81270dc700 (LWP 9337)]
Breakpoint 2, mode_2() at c/recipeNo024_HelloWorld.c:10
10 printf("Mode 2\n");
(gdb) cont
Continuing.
[Switching to Thread 0x2b8126fdb700 (LWP 9335)]
Breakpoint 1, mode_1() at c/recipeNo024_HelloWorld.c:6
6 printf("Mode 1\n");
(gdb) cont
Continuing.
[Switching to Thread 0x2b81271dd700 (LWP 9338)]
Breakpoint 3, mode_3() at c/recipeNo024_HelloWorld.c:14
14 printf("Mode 3\n");
(gdb) cont
を処理する
jps
接続GDBを処理一覧表示するサンプル・コード
java
使用JPSを開始
あなたがここにも使用してCLionをデバッグする上でのデモビデオを見つけることができます
https://github.com/mkowsiak/jnicookbook/tree/master/recipeNo024
:
あなたはここに、この例のサンプルコードを見つけることができます