11

Javaプログラムが実行しているシステムコールを確認するにはどうすればよいですか?Linuxでこれを行うツールはありますか?

4

3 に答える 3

15

straceを使用します。しかし、私の場合にはトリックがあります。オプション-fが必要で、と同じ--follow-forksです。たとえば、次のコードです。

public class Foo {
    public static void main (String [] args) {
        System.out.println("XXX");    
    }
}

実行javac Foo.javaしてコンパイルした後は、strace java Foo 2>&1 | grep write何も出力しません。しかし、strace -f java Foo 2>&1 | grep write印刷物:

[pid 11655] write(3, "0x63", 4)         = 4
[pid 11655] write(3, "\0", 1)           = 1
[pid 11655] write(3, "\0", 1)           = 1
[pid 11655] write(3, "\0", 1)           = 1
[pid 11655] write(3, "\0", 1)           = 1
[pid 11655] write(3, "\0", 1)           = 1
[pid 11655] write(3, "\0", 1)           = 1
[pid 11655] write(3, "\0", 1)           = 1
[pid 11655] write(3, "\0", 1)           = 1
[pid 11655] write(1, "XXX", 3XXX)          = 3
[pid 11655] write(1, "\n", 1

[pid 11655] write(1, "XXX", 3XXX) = 3に対して行われたシステムコールを示していますSystem.out.println("XXX")

于 2013-03-04T05:27:34.680 に答える
12

straceを使用する:

strace -f java your_program

また

strace -f -p <pid of your java program>
于 2012-04-30T15:58:30.323 に答える
1

ltracehttp://linux.die.net/man/1/ltraceを参照してください

于 2012-04-30T13:56:15.883 に答える