Code Monkey home page Code Monkey logo

jitwatch-intellij's Introduction

JITWatch Plugin for IntelliJ IDEA

The plugin can be used to view and analyze HotSpot JIT compilation logs inside IntelliJ IDEA. It uses JITWatch to load and analyze the logs and provides a UI for exploring the compilation data directly in your code editor.

Video Demo

Here is a video of a demo of the JITWatch plugin, recorded at the JVM Language Summit 2016.

Creating and Loading the Compilation Log

The simple option for creating and loading the compilation log is to enable the "Log compilation" option in the "JITWatch" tab of the run configuration settings.

If you enable the option, the plugin will create a HotSpot log in a temporary directory and automatically load it after the execution completes.

Alternatively, you can add the logging options to the VM options of your run configuration, and then load the log file manually using the Analyze | Load HotSpot Compilation Log... menu item. To enable logging, you need the following options:

-XX:+UnlockDiagnosticVMOptions
-XX:+TraceClassLoading
-XX:+LogCompilation

The plugin does not support viewing the assembly code at this time, so you shouldn't enable the -XX:+PrintAssembly option.

jitwatch-intellij's People

Contributors

bashor avatar yole avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jitwatch-intellij's Issues

NoClassDefFoundError: com/intellij/util/PathKt

Hi,

first of all, thank you for this great plugin.
Unfortunately I've got this NoClassDefFoundError, when using it.

Steps to reproduce:

  1. use jitwatch-intellj plugin code from HEAD (02-Oct-2016)
  2. exec gradlew buildPlugin
  3. install plugin locally
  4. run an arbitrary project with JitWatch enabled
  5. JitWatch report is loaded and show
  6. click on one method -> editor opens and method is show
  7. in editor click on icon left of line number, to open JitWatch window to show the java code ==> crash
java.lang.NoClassDefFoundError: com/intellij/util/PathKt
    at ru.yole.jitwatch.JitWatchModelService.findJavapPath(JitWatchModelService.kt:185)
    at ru.yole.jitwatch.JitWatchModelService.loadBytecode(JitWatchModelService.kt:166)
    at ru.yole.jitwatch.JitWatchModelService$loadBytecodeAsync$1.run(JitWatchModelService.kt:154)
    at com.intellij.openapi.application.impl.ApplicationImpl$2.run(ApplicationImpl.java:309)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: com.intellij.util.PathKt PluginClassLoader[ru.yole.jitwatch-intellij, 1.0.1]
    at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:64)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 9 more

Any help is welcome.

Scala support

Love the plugin! Would love to use this for Scala.

I can take a shot at implementing, although its been a little while since I've worked with the Scala Plugin internals, so I'll wait and see if someone on the JetBrains Scala team volunteers first ๐Ÿ˜„

/cc @Alefas

Exception

Read access is allowed from event dispatch thread or inside read-action only (see com.intellij.openapi.application.Application.runReadAction())
Details: Current thread: Thread[ApplicationImpl pooled thread 22,4,Idea Thread Group] 1470409042
; dispatch thread: false; isDispatchThread(): false
SystemEventQueueThread: Thread[AWT-EventQueue-0 2016.2.2#IU-162.1628.40 IDEA, eap:false, os:Windows 7 6.1, java-version:JetBrains s.r.o 1.8.0_76-release-b218,6,main] 1331135866
java.lang.Throwable
    at com.intellij.openapi.diagnostic.Logger.error(Logger.java:138)
    at com.intellij.openapi.application.impl.ApplicationImpl.assertReadAccessAllowed(ApplicationImpl.java:951)
    at com.intellij.openapi.module.impl.ModuleManagerImpl.moduleDependencyComparator(ModuleManagerImpl.java:519)
    at com.intellij.openapi.module.ModuleUtilCore.findModuleForPsiElement(ModuleUtilCore.java:113)
    at ru.yole.jitwatch.JitWatchModelService.loadBytecode(JitWatchModelService.kt:163)
    at ru.yole.jitwatch.JitWatchModelService$loadBytecodeAsync$1.run(JitWatchModelService.kt:154)
    at com.intellij.openapi.application.impl.ApplicationImpl$2.run(ApplicationImpl.java:308)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

NoSuchMethodError

Hello, trying the plugin with

IntelliJ IDEA 2022.3.1 (Community Edition)
Build #IC-223.8214.52, built on December 20, 2022

I ran into this error:

java.lang.NoSuchMethodError: 'java.lang.Object[] com.intellij.openapi.extensions.Extensions.getExtensions(java.lang.String)'
	at ru.yole.jitwatch.languages.JitWatchLanguageSupportKt.getAllSupportedLanguages(JitWatchLanguageSupport.kt:63)
	at ru.yole.jitwatch.JitWatchModelService.<init>(JitWatchModelService.kt:46)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	at com.intellij.serviceContainer.ConstructorInjectionKt.instantiateUsingPicoContainer(constructorInjection.kt:54)
	at com.intellij.serviceContainer.ComponentManagerImpl.instantiateClassWithConstructorInjection(ComponentManagerImpl.kt:996)
	at com.intellij.serviceContainer.ServiceComponentAdapter.createAndInitialize(ServiceComponentAdapter.kt:43)
	at com.intellij.serviceContainer.ServiceComponentAdapter.doCreateInstance(ServiceComponentAdapter.kt:39)
	at com.intellij.serviceContainer.BaseComponentAdapter.doCreateInstance(BaseComponentAdapter.kt:154)
	at com.intellij.serviceContainer.BaseComponentAdapter.createInstance$lambda$1(BaseComponentAdapter.kt:133)
	at com.intellij.openapi.progress.Cancellation.computeInNonCancelableSection(Cancellation.java:99)
	at com.intellij.serviceContainer.BaseComponentAdapter.createInstance(BaseComponentAdapter.kt:132)
	at com.intellij.serviceContainer.BaseComponentAdapter.getInstance(BaseComponentAdapter.kt:92)
	at com.intellij.serviceContainer.ComponentManagerImpl.doGetService(ComponentManagerImpl.kt:673)
	at com.intellij.serviceContainer.ComponentManagerImpl.getService(ComponentManagerImpl.kt:629)
	at com.intellij.openapi.components.ServiceManager.getService(ServiceManager.java:27)
	at ru.yole.jitwatch.JitWatchModelService$Companion.getInstance(JitWatchModelService.kt:253)
	at ru.yole.jitwatch.JitLineMarkerProvider.getLineMarkerInfo(JitLineMarkerProvider.kt:21)
	at com.intellij.codeInsight.daemon.impl.LineMarkersPass.queryProviders(LineMarkersPass.java:184)
	at com.intellij.codeInsight.daemon.impl.LineMarkersPass.lambda$doCollectInformation$3(LineMarkersPass.java:104)
	at com.intellij.codeInsight.daemon.impl.Divider.divideInsideAndOutsideInOneRoot(Divider.java:95)
	at com.intellij.codeInsight.daemon.impl.LineMarkersPass.doCollectInformation(LineMarkersPass.java:99)
	at com.intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:57)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$1(PassExecutorService.java:379)
	at com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1086)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$doRun$2(PassExecutorService.java:371)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:589)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:664)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:620)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:588)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.doRun(PassExecutorService.java:370)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.lambda$run$0(PassExecutorService.java:346)
	at com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:173)
	at com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:182)
	at com.intellij.codeInsight.daemon.impl.PassExecutorService$ScheduledPass.run(PassExecutorService.java:344)
	at com.intellij.concurrency.JobLauncherImpl$VoidForkJoinTask$1.exec(JobLauncherImpl.java:181)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)

Is this plugin still maintained?

Already disposed

Already disposed: Project (Disposed) testHibernate
java.lang.AssertionError: Already disposed: Project (Disposed) testHibernate
    at com.intellij.openapi.components.impl.ComponentManagerImpl.getComponent(ComponentManagerImpl.java:171)
    at com.intellij.openapi.wm.ToolWindowManager.getInstance(ToolWindowManager.java:37)
    at ru.yole.jitwatch.JitActionsKt.registerToolWindows(JitActions.kt:49)
    at ru.yole.jitwatch.JitActionsKt.loadLogAndShowUI(JitActions.kt:32)
    at ru.yole.jitwatch.JitRunConfigurationExtension$attachToProcess$1$processTerminated$1.run(JitRunConfigurationExtension.kt:90)
    at com.intellij.openapi.application.TransactionGuardImpl$6.run(TransactionGuardImpl.java:294)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.a(LaterInvocator.java:334)
    at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:318)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:831)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:667)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:387)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Tab close button

It could really use a close button for the tab to get rid of the tab and related data in the editor (similar to closing the code coverage tab).

(Great plugin, thanks!)

how do I make it work with Kotlin

here's what I'm getting with a simple kotlin file

fun main(args: Array<String>): Unit {
  println(fact(100000))
}

fun fact(what: Long): BigInteger =
    if (what == 0L) {
      BigInteger.ZERO
    } else {
      var p = BigInteger.ONE
      for (i in 1..what) {
        p *= BigInteger.valueOf(i)
      }
      p
    }

http://grab.by/RWD2

NoClassDefFoundError when Kotlin not found

When the Kotlin plugin is disabled the plugin fails with a java.lang.NoClassDefFoundError: org/jetbrains/kotlin/idea/search/SearchUtilKt. I don't know enough about IntelliJ plugins. Can the Kotlin plugin be a dependency or do you have to package some Kotlin runtime in this one or at least add some documentation?

Stack Trace

org/jetbrains/kotlin/idea/search/SearchUtilKt
java.lang.NoClassDefFoundError: org/jetbrains/kotlin/idea/search/SearchUtilKt
    at ru.yole.jitwatch.languages.JitWatchJavaSupport.findClass(JitWatchJavaSupport.kt:24)
    at ru.yole.jitwatch.languages.JitWatchJavaSupport.findClass(JitWatchJavaSupport.kt:17)
    at ru.yole.jitwatch.JitWatchModelService.getPsiClass(JitWatchModelService.kt:144)
    at ru.yole.jitwatch.JitWatchModelService.getPsiMember(JitWatchModelService.kt:137)
    at ru.yole.jitwatch.JitWatchModelService$loadLog$2$run$1.invoke(JitWatchModelService.kt:92)
    at ru.yole.jitwatch.JitWatchModelService$loadLog$2$run$1.invoke(JitWatchModelService.kt:84)
    at ru.yole.jitwatch.InlineAnalyzer$InlineJournalVisitor.processParseTag(InlineAnalyzer.kt:87)
    at ru.yole.jitwatch.InlineAnalyzer$InlineJournalVisitor.processParseTag$default(InlineAnalyzer.kt:61)
    at ru.yole.jitwatch.InlineAnalyzer$InlineJournalVisitor.visitTag(InlineAnalyzer.kt:58)
    at org.adoptopenjdk.jitwatch.journal.JournalUtil.visitParseTagsOfLastTask(JournalUtil.java:81)
    at ru.yole.jitwatch.InlineAnalyzer.visit(InlineAnalyzer.kt:47)
    at org.adoptopenjdk.jitwatch.treevisitor.TreeVisitor.walkPackage(TreeVisitor.java:48)
    at org.adoptopenjdk.jitwatch.treevisitor.TreeVisitor.walkPackage(TreeVisitor.java:39)
    at org.adoptopenjdk.jitwatch.treevisitor.TreeVisitor.walkTree(TreeVisitor.java:29)
    at ru.yole.jitwatch.JitWatchModelService$loadLog$2$run$2.run(JitWatchModelService.kt:96)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:856)
    at ru.yole.jitwatch.JitWatchModelService$loadLog$2.run(JitWatchModelService.kt:95)
    at com.intellij.openapi.progress.impl.CoreProgressManager$TaskRunnable.run(CoreProgressManager.java:635)
    at com.intellij.openapi.progress.impl.CoreProgressManager$3.run(CoreProgressManager.java:170)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:494)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:443)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:155)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$1.run(ProgressManagerImpl.java:128)
    at com.intellij.openapi.application.impl.ApplicationImpl$2.run(ApplicationImpl.java:308)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.jetbrains.kotlin.idea.search.SearchUtilKt PluginClassLoader[ru.yole.jitwatch-intellij, 1.0]
    at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:64)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 30 more

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.