如何告诉 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 在哪里可以找到我的源代码?的主要内容,如果未能解决你的问题,请参考以下文章
在libselinux中哪里可以找到函数“ setcon”的源代码?
如何告诉 Emscripten SDK 在哪里可以找到 Node?