2016-10-31 12 views
0

マルチスレッドを含むJavaクラスを作成します。各スレッドは異なるJNIインターフェイスを呼び出します。私は、gdb -p(pidはJavaプロセスID)を使ってJNIをデバッグしようとしています。しかし、特定のJNIインターフェースがどのスレッドに対応しているのかわかりません。この場合、gdbのJNIコードをどのようにデバッグできますか?Linuxでマルチジャンクスレッドから呼び出されるJNIをデバッグする方法

答えて

0

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

https://youtu.be/8Cjeq4l5COU

あなたはここに、この例のサンプルコードを見つけることができます

関連する問題