2011-10-28 7 views
3

`の私はHPROFプロファイラの出力は、行番号が含まれていないにかかわらずlineno`値

java -cp some:jars:out \ 
-agentlib:hprof=cpu=times,format=a,file=java.hprof.txt,lineno=y,doe=y com.foo.Benchmark \ 
< /dev/null 

を実行しているし、出力に私はスタックフレームを取得する行番号なし

THREAD START (obj=50000150, id = 200002, name="HPROF gc_finish watcher", group="system") 
THREAD START (obj=50000151, id = 200001, name="main", group="main") 
THREAD START (obj=50000281, id = 200003, name="Thread-1", group="main") 
THREAD END (id = 200003) 
THREAD END (id = 200001) 
THREAD START (obj=500002a5, id = 200004, name="DestroyJavaVM", group="main") 
THREAD END (id = 200004) 
TRACE 307081: 
     com.foo.Benchmark.methodName(Benchmark.java:Unknown line) 
     com.foo.Benchmark.anotherMethodName(Benchmark.java:Unknown line) 
     ... 

私が変更した場合lineno=ylineno=n私はまだUnknown lineを取得します。

私は-gでクラスをコンパイルしました。

javac -g -Xlint -encoding UTF-8 -source 1.5 -d out -classpath ... src/main/com/foo/*.java 

のような私のjavacルックスは、私は、彼らが行番号を持っていることを確認する.classファイルをチェックする:私はいくつかのフラグの組み合わせを使用しています

javap -classpath out -c -l com.foo.Benchmark 

LineNumberTable: 
    line 1077: 0 
    line 1078: 8 
    line 1079: 14 
    line 1080: 21 
    line 1082: 23 
    line 1083: 31 
    line 1084: 43 

のようなものの多くを示しています行番号の出力を妨げる?

答えて

1

私はまったく同じ問題に直面しましたが、ソースをコンパイルすると-gが役に立ちました。私は入手できますか

java -cp "./build/classes" -agentlib:hprof=heap=sites,depth=20 org.sample.welcome.Main a b c 

- 私はこれを実行した場合、今

LineNumberTable: 
line 16: 0 
line 17: 8 
line 18: 12 
line 19: 20 
line 18: 29 
line 21: 35 

から-gでコンパイルした後、私はライン(私は-gオプションなしで、それ以外の場合は表示されません)このような数字を参照してくださいユーザー定義クラスの行番号。 Iあなたのケースで間違って何が起こっているのかわからない、これらは私の観察されているにもかかわらず -

  • -gなしのjavacを使用するには:私は-lineno(デフォルトy)はyに設定されている場合は、私はまだ行が表示されませんユーザ定義のクラス(上記の場合はMain)以外のほとんどのクラスの番号。 -linenonに設定した場合、いずれのクラスの行番号も表示されません。

  • -gでのjavacを使用する:私はy-linenoセットを持っている場合、私は(あなたのケースで間違って何が起こっているのかわからない)すべてのクラスの行番号を見ることができます。

私がHPROFのために見つけることができる唯一のドキュメントはこれを超えて何も言わない。私は1つのオプションは、より少ないオプションの引数で試して結果を見ることだと思います。

注:上記の例ではJDK 1.6を使用しています。

+0

ポインタありがとうございます。私はもうこのベンチマークを簡単に走らせることはできませんが、これを念頭に置いておきます。 –

+0

マイクの例では、 'cpu = times'オプションを使用しています - あなたは' heap = sites'です。後のオプションは行番号を出力し、最初の行は行番号を出力しません。 –

関連する問題