Class StackTraceDeobfuscator

  • Direct Known Subclasses:
    StackTraceDeobfuscator

    public abstract class StackTraceDeobfuscator
    extends java.lang.Object
    Deobfuscates stack traces on the server side. This class requires that you have turned on emulated stack traces, via <set-property name="compiler.stackMode" value="emulated" /> in your .gwt.xml module file for browsers that don't support sourcemaps or <set-property name="compiler.useSourceMaps" value="true"/> for browsers that support it (e.g. Chrome), and moved your symbol map files to a location accessible by your server-side code. You can use the GWT compiler -deploy command line argument to specify the location of the folder into which the generated symbolMaps directory is written. By default, the final symbolMaps directory is war/WEB-INF/deploy/yourmodulename/symbolMaps/.
    • Method Summary

      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      void deobfuscateStackTrace​(java.lang.Throwable throwable, java.lang.String strongName)
      Replaces the stack traces in the given Throwable and its causes with deobfuscated stack traces wherever possible.
      static StackTraceDeobfuscator fromFileSystem​(java.lang.String symbolMapsDirectory)
      Creates a deobfuscator that loads symbol and source map files from the given directory.
      static StackTraceDeobfuscator fromResource​(java.lang.String symbolMapsPath)
      Creates a deobfuscator that loads symbol and source map files under given resource path.
      static StackTraceDeobfuscator fromUrl​(java.net.URL urlPath)
      Creates a deobfuscator that loads symbol and source map files beneath the given URL.
      protected java.io.InputStream getSourceMapInputStream​(java.lang.String permutationStrongName, int fragmentNumber)  
      protected java.io.InputStream getSymbolMapInputStream​(java.lang.String permutationStrongName)
      Retrieves a new InputStream for the given permutation strong name.
      protected abstract java.io.InputStream openInputStream​(java.lang.String fileName)
      Opens a new InputStream for a symbol or source map file.
      java.lang.StackTraceElement[] resymbolize​(java.lang.StackTraceElement[] st, java.lang.String strongName)
      Convenience method which resymbolizes an entire stack trace to extent possible.
      java.lang.StackTraceElement resymbolize​(java.lang.StackTraceElement ste, java.lang.String strongName)
      Best effort resymbolization of a single stack trace element.
      void setLazyLoad​(boolean lazyLoad)
      If set to true, only symbols requested to be deobfuscated are cached and the rest is discarded.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • StackTraceDeobfuscator

        public StackTraceDeobfuscator()
    • Method Detail

      • fromResource

        public static StackTraceDeobfuscator fromResource​(java.lang.String symbolMapsPath)
        Creates a deobfuscator that loads symbol and source map files under given resource path. Uses StackTraceObfuscator's ClassLoader.
      • fromFileSystem

        public static StackTraceDeobfuscator fromFileSystem​(java.lang.String symbolMapsDirectory)
        Creates a deobfuscator that loads symbol and source map files from the given directory.
      • fromUrl

        public static StackTraceDeobfuscator fromUrl​(java.net.URL urlPath)
        Creates a deobfuscator that loads symbol and source map files beneath the given URL.
      • setLazyLoad

        public void setLazyLoad​(boolean lazyLoad)
        If set to true, only symbols requested to be deobfuscated are cached and the rest is discarded. This provides a large memory savings at the expense of occasional extra disk reads. Note that, this will only have effect on symbol maps that haven't been fully loaded yet.
      • deobfuscateStackTrace

        public final void deobfuscateStackTrace​(java.lang.Throwable throwable,
                                                java.lang.String strongName)
        Replaces the stack traces in the given Throwable and its causes with deobfuscated stack traces wherever possible.
        Parameters:
        throwable - the Throwable that needs its stack trace to be deobfuscated
        strongName - the GWT permutation strong name
      • resymbolize

        public final java.lang.StackTraceElement[] resymbolize​(java.lang.StackTraceElement[] st,
                                                               java.lang.String strongName)
        Convenience method which resymbolizes an entire stack trace to extent possible.
        Parameters:
        st - the stack trace to resymbolize
        strongName - the GWT permutation strong name
        Returns:
        a best effort resymbolized stack trace
      • resymbolize

        public final java.lang.StackTraceElement resymbolize​(java.lang.StackTraceElement ste,
                                                             java.lang.String strongName)
        Best effort resymbolization of a single stack trace element.
        Parameters:
        ste - the stack trace element to resymbolize
        strongName - the GWT permutation strong name
        Returns:
        the best effort resymbolized stack trace element
      • getSourceMapInputStream

        protected java.io.InputStream getSourceMapInputStream​(java.lang.String permutationStrongName,
                                                              int fragmentNumber)
                                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • getSymbolMapInputStream

        protected java.io.InputStream getSymbolMapInputStream​(java.lang.String permutationStrongName)
                                                       throws java.io.IOException
        Retrieves a new InputStream for the given permutation strong name. This implementation, which subclasses may override, returns a InputStream for the permutation-strong-name.symbolMap file.
        Parameters:
        permutationStrongName - the GWT permutation strong name
        Returns:
        a new InputStream
        Throws:
        java.io.IOException
      • openInputStream

        protected abstract java.io.InputStream openInputStream​(java.lang.String fileName)
                                                        throws java.io.IOException
        Opens a new InputStream for a symbol or source map file.
        Parameters:
        fileName - name of the symbol or source map file
        Returns:
        an input stream for reading the file (doesn't need to be buffered).
        Throws:
        java.io.IOException - if an I/O error occurs while creating the input stream.