gpt4 book ai didi

java - hprof 探查器输出不包括行号,无论 `lineno` 值如何

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:35:54 26 4
gpt4 key购买 nike

我在运行

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 的唯一文档除此之外什么也没说。我认为一种选择是尝试使用更少的可选参数并查看结果。

注意:我在上面的例子中使用的是 JDK 1.6

关于java - hprof 探查器输出不包括行号,无论 `lineno` 值如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7932606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com