【问题标题】:How do I tell visualvm where to find my source code?如何告诉 visualvm 在哪里可以找到我的源代码?
【发布时间】:2015-07-25 10:55:56
【问题描述】:

我正在运行 VisualVM 来分析一个简单的 Java 应用程序。当我双击分析窗格中的一个方法(希望获得更多详细信息)时,它会显示“找不到类的源......”。我知道源头在哪里。我如何告诉 VisualVM 去哪里看?

【问题讨论】:

  • 只是猜测,但是如果您将 .java 文件放在类路径中的 .class 文件旁边会怎样?或者,如果它们在 jar 中,则将源代码和类捆绑在一起,使它们彼此相邻。
  • 我尝试将 .java 文件与 .class 文件一起添加到我的主 .jar 文件中,但没有帮助。

标签: java visualvm


【解决方案1】:

我在 VisualVM 进程显示错误对话框时对其进行了堆栈转储,似乎问题出在 org.netbeans.modules.profiler.api.GoToSource 类中,在方法 openSourceImpl 中。

此方法尝试使用GoToSourceProvider 服务提供者接口的任何注册实现来加载源代码,如果它们都无法显示有问题的源代码,则会显示错误消息。

我的猜测是,VisualVM 的当前默认版本没有注册任何GoToSourceProviders,因此总是无法查找源代码。

从包名看来,GoToSourceProvider 是探查器模块的 SPI,但我找不到任何有关如何实现此 SPI 的文档,而且它似乎不是 VisualVM 的一部分扩展点。

【讨论】:

  • 在从 Netbeans 中删除分析器以制作独立的 VisualVM 时,这听起来像是一个疏忽。
【解决方案2】:

您好,在 NetBeans IDE 中实现了与 VisualVM 几乎相同的东西(我使用的是 8.0.2)。您只需单击Profile->Project Profile。单击时向您显示源代码正在那里工作。但不幸的是,没有更详细的信息,哪些代码行花费的时间最多。

为此,我将修改代码并使用手动计数

long beg = System.nanoTime() 
lineISuspect
sum += System.nanoTime() - beg;

【讨论】:

    猜你喜欢
    • 2011-08-31
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 2012-07-31
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多