java - 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=y改为lineno=n,我仍然会得到Unknown line
我用-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选项)-

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

我得到了用户定义类的行号。即使我不知道你的情况出了什么问题,这些是我的观察结果-
使用不带-g的javac:如果我将-lineno(默认值y)设置为y,那么除了用户定义的类(在上面的例子中是Main),我仍然看不到大多数类的行号。如果我将-lineno设置为n,那么无论如何,我都不会看到任何类的行号。
将javac与-g一起使用:如果我将-lineno设置为y,我可以看到所有类的行号(不确定在您的情况下会出现什么问题)。
我能找到的HPROF的唯一文档并没有说明什么。我认为一种选择是尝试使用更少的可选参数并查看结果。
注意:我在上面的例子中使用的是JDK1.6

本文翻译自 https://stackoverflow.com/questions/7932606/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 java profiling hprof


相关文章:

java - 找不到重命名的Eclipse快捷方式

java - LibGDX-在运行时激活加速度计

python - 有关python分析的问题

java - 从Ubuntu中的jar文件启动tomcat

java - 为什么jhat的-baseline选项不起作用?

java - 网络连接上的Java轮询

java - 用LittleEndian将短裤数组写入文件的好方法

c - 在Linux上以编程方式获取功能的总时间和繁忙时间

java - 在服务器端配置文件应用程序

java - 如何在罐子中剖析类?