Java hprof探查器输出不';无论'lineno'值为多少,都不包括行号

Java hprof探查器输出不';无论'lineno'值为多少,都不包括行号,java,profiling,hprof,Java,Profiling,Hprof,我在跑步 java -cp some:jars:out \ -agentlib:hprof=cpu=times,format=a,file=java.hprof.txt,lineno=y,doe=y com.foo.Benchmark \ < /dev/null 如果我将lineno=y更改为lineno=n我仍然会得到未知行 我用-g编译了这些类。我的javac看起来像 javac -g -Xlint -encoding UTF-8 -source 1.5 -d out -classp

我在跑步

java -cp some:jars:out \
-agentlib:hprof=cpu=times,format=a,file=java.hprof.txt,lineno=y,doe=y com.foo.Benchmark \
< /dev/null
如果我将
lineno=y
更改为
lineno=n
我仍然会得到
未知行

我用
-g
编译了这些类。我的
javac
看起来像

javac -g -Xlint -encoding UTF-8 -source 1.5 -d out -classpath ... src/main/com/foo/*.java
我检查了
.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

我是否使用了一些防止行号输出的标志组合?

我遇到了完全相同的问题,但使用
-g
编译源代码有帮助。在使用
-g
编译之后,我看到这样的行号(如果没有
-g
选项,我就看不到其他行号)-

现在,如果我运行这个-

java -cp "./build/classes" -agentlib:hprof=heap=sites,depth=20  org.sample.welcome.Main a b c
我确实得到了用户定义类的行号。尽管我不确定你的情况到底出了什么问题,但这些都是我的观察结果-

  • 使用javac而不使用
    -g
    :如果将
    -lineno
    (默认值
    y
    )设置为
    y
    ,除了用户定义的类(
    Main
    ,在上述情况下),我仍然看不到大多数类的行号。如果我已经将
    -lineno
    设置为
    n
    ,那么无论如何我都不会看到任何类的行号

  • 将javac与
    -g
    一起使用:如果将
    -lineno
    设置为
    y
    ,我可以看到所有类的行号(不确定在您的情况下发生了什么错误)

我能找到的唯一文档没有说任何超出此范围的内容。我认为一种选择是尝试使用较少的可选参数,然后查看结果


注意:在上面的示例中,我使用的是JDK1.6

谢谢您的指针。我不再将此基准设置为易于运行,但我会记住这一点。Mike的示例使用
cpu=times
选项,您的--
heap=sites
。后一个选项不输出行号,第一个选项不输出行号。
LineNumberTable:
 line 16: 0
 line 17: 8
 line 18: 12
 line 19: 20
 line 18: 29
 line 21: 35
java -cp "./build/classes" -agentlib:hprof=heap=sites,depth=20  org.sample.welcome.Main a b c