Table of Contents

sc

sc online tutorialopen in new window

TIP

Search classes loaded by JVM.

sc stands for search class. This command can search all possible classes loaded by JVM and show their information. The supported options are: [d][E][f] and [x:].

Supported Options

NameSpecification
class-patternpattern for the class name
method-patternpattern for the method name
[d]print the details of the current class, including its code source, class specification, its class loader and so on.
If a class is loaded by more than one class loader, then the class details will be printed several times
[E]turn on regex match, the default behavior is wildcards match
[f]print the fields info of the current class, MUST be used with -d together
[x:]specify the depth of recursive traverse the static fields, the default value is '0' - equivalent to use toString to output
[c:]The hash code of the special class's classLoader
[classLoaderClass:]The class name of the ClassLoader that executes the expression.
[n:]Maximum number of matching classes with details (100 by default)
[cs <arg>]Specify the return value of class's ClassLoader#toString(). Long format is[classLoaderStr <arg>]

TIP

class-patten supports full qualified class name, e.g. com.taobao.test.AAA and com/taobao/test/AAA. It also supports the format of 'com/taobao/test/AAA', so that it is convenient to directly copy class name from the exception stack trace without replacing '/' to '.'.

TIP

sc turns on matching sub-class match by default, that is, sc will also search the sub classes of the target class too. If exact-match is desired, pls. use options disable-sub-class true.

Usage

  • Wildcards match search

    $ sc demo.*
    demo.MathGame
    Affect(row-cnt:1) cost in 55 ms.
    
  • View class details

    $ sc -d demo.MathGame
    class-info        demo.MathGame
    code-source       /private/tmp/math-game.jar
    name              demo.MathGame
    isInterface       false
    isAnnotation      false
    isEnum            false
    isAnonymousClass  false
    isArray           false
    isLocalClass      false
    isMemberClass     false
    isPrimitive       false
    isSynthetic       false
    simple-name       MathGame
    modifier          public
    annotation
    interfaces
    super-class       +-java.lang.Object
    class-loader      +-sun.misc.Launcher$AppClassLoader@3d4eac69
                        +-sun.misc.Launcher$ExtClassLoader@66350f69
    classLoaderHash   3d4eac69
    
    Affect(row-cnt:1) cost in 875 ms.
    
  • View class fields

    $ sc -d -f demo.MathGame
    class-info        demo.MathGame
    code-source       /private/tmp/math-game.jar
    name              demo.MathGame
    isInterface       false
    isAnnotation      false
    isEnum            false
    isAnonymousClass  false
    isArray           false
    isLocalClass      false
    isMemberClass     false
    isPrimitive       false
    isSynthetic       false
    simple-name       MathGame
    modifier          public
    annotation
    interfaces
    super-class       +-java.lang.Object
    class-loader      +-sun.misc.Launcher$AppClassLoader@3d4eac69
                        +-sun.misc.Launcher$ExtClassLoader@66350f69
    classLoaderHash   3d4eac69
    fields            modifierprivate,static
                      type    java.util.Random
                      name    random
                      value   java.util.Random@522b4
                              08a
    
                      modifierprivate
                      type    int
                      name    illegalArgumentCount
    
    
    Affect(row-cnt:1) cost in 19 ms.
    
  • Search class by ClassLoader#toString (on the premise that a ClassLoader instance whose toString() returns apo has loaded some classes including demo.MathGame, demo.MyBar, demo.MyFoo)

    $ sc -cs apo *demo*
    demo.MathGame
    demo.MyBar
    demo.MyFoo
    Affect(row-cnt:3) cost in 56 ms.