- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在运行
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/
我有一个 java.hprof.txt 文件(在 OutOfMemoryError 后自动生成),我想将其转换为二进制 hprof 格式。有什么简单的方法可以做到这一点吗? 最佳答案 不,没有。您必须
我的测试设备版本是 5.0.1 (Lollipop)。 我在 Android Studio 1.3 中获取了 Android 堆转储文件。 但是我看到了错误信息。 所以我尝试在 DDMS 中获取转储文
尝试使用内存分析器打开 HPROF 文件(由 Debug.dumpHprofData 创建)时出现以下异常: java.io.IOException: Unknown HPROF Version (J
Eclipse Memory Analyzer 文档说它可以打开 IBM 可移植堆转储文件 (*.phd): http://help.eclipse.org/luna/index.jsp?topic=
如果我使用任何 Java 应用程序(例如 VisualVM)打开堆转储(hprof 文件),VisualVM 是否需要比 hprof 文件大小更多的堆内存? 就我而言,hprof 是 4Gb 文件,V
我正在使用 Eclipse Memory Analyzer 查看 HPROF 文件。它为同一类的不同实例显示不同数量的字段: 看起来缺失的字段可能从未被分配过,但是这些缺失字段的值是多少?它们是“零”
我想知道是否有办法“安排”HPROF转储,以便我们可以每天(或每小时,具体取决于大小)生成一个 HPROF 文件。 我的想法是在生产系统上添加分析,并将其作为日常报告的一部分,这样它就成为“例行公事”
目前我有一个核心转储文件,我想提取堆转储。无论我尝试什么,我总是会收到以下错误消息: god@heaven:~$ sudo /opt/java-MyApp/bin/jmap -dump:format=
我在控制台日志中看到以下错误: HPROF ERROR: unable to resolve a method id HPROF ERROR: got NULL trace in obj_alloc
在我的应用程序中,我可以选择捕获 hprof 转储。我使用过 android.os.Debug.dumpHprofData(字符串文件名) 最初我虽然通过上述方法生成的 hprof 数据是用于整个装置
最近,我在运行应用程序时遇到了 java.lang.OutOfMemoryError 异常。 在一个这样的实例中,我能够使用 jvisualvm 获取堆转储。 我可以使用 NetBeans 8.1 I
这个问题在这里已经有了答案: How do I analyze a .hprof file? (7 个答案) 关闭 5 年前。 我正在运行 Java 应用程序并遇到内存不足的错误。 .hprof 文
正如许多有用网站所详述的那样,分析 Android 应用程序内存使用情况的一种方法是执行“kill -10 [PID]”以触发 HPROF 转储。这似乎适用于某些设备,并且 logcat 通常包含如下
我想跟踪我的应用程序的内存泄漏。但是当我想从 DDMS 按下转储 HPROF 文件按钮时,我收到一条错误消息:“hprof:无法打开/sdcard/com.google.android.apps.up
我尝试将转储从 Android Device Monitor 转换为 Eclipse Memory Analyzer 格式。我使用下一个命令 hprof-conv dump.hprof convert
有时,尤其是在我的应用程序中实现新功能时,我会使用 DDMS + HPROF 来分析内存和堆的使用情况。由于该应用程序似乎没有任何性能 - ANR 问题并且一切正常,最初我并不关心它 - 但现在,我看
我有一个非常大的堆转储 (.hprof) 文件 (16GB)。当我尝试在 Visual Vm 中打开它时,VM 只是挂起。我试图在 JProfiler 中打开它。 Jprofiler 给了我一个内存不
我正在尝试以编程方式分析 hprof 文件。使用 android-sdk 中的 hprof-conv 工具,我生成了一堆 com.your.package.index 文件。 如何以编程方式解析这些
我的程序抛出以下异常: java.lang.OutOfMemoryError: unable to create new native thread 但是当我将 -XX:+HeapDumpOnOutO
我正在调查使用 Eclipse 的内存分析器 (MAT) 分析 HPROF 文件。支配树、报告和 OQL 界面看起来非常有用。但所有这些都必须通过 MAT 软件手动完成。 是否有命令行界面,以便我可以
我是一名优秀的程序员,十分优秀!