如何告诉 visualvm 在哪里可以找到我的源代码?

Posted

技术标签:

【中文标题】如何告诉 visualvm 在哪里可以找到我的源代码?【英文标题】:How do I tell visualvm where to find my source code? 【发布时间】:2014-07-07 19:22:14 【问题描述】:

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

【问题讨论】:

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

【讨论】:

以上是关于如何告诉 visualvm 在哪里可以找到我的源代码?的主要内容,如果未能解决你的问题,请参考以下文章

在 VisualVM 中哪里可以找到时间(CPU)列?

在libselinux中哪里可以找到函数“ setcon”的源代码?

如何告诉 Emscripten SDK 在哪里可以找到 Node?

反编译flutter release apk。在哪里可以找到源代码?

我在哪里可以找到 RestKit Post 源代码或教程?

您好谁能告诉我在哪里可以找到蜂巢数据存储目录?