简体   繁体   中英

Debugging in GWT 2.7 Super Dev Mode, stackTrace is missing?

I just migrated from GWT 2.5.1 to 2.7 and first time using SuperDev Mode. I have enabled "JavaScript source maps" in Chrome dev tools. In Chrome Console exception looks like this:

com.google.gwt.event.shared.UmbrellaException: Exception caught: For input string: "a"
  at fillInStackTrace_0_g$
  at Throwable_3_g$
  at Exception_3_g$
  at RuntimeException_3_g$
  at UmbrellaException_3_g$
  at UmbrellaException_5_g$
  at fireEvent_1_g$
  at fireEvent_3_g$
  at fireNativeEvent_1_g$
  at onBrowserEvent_2_g$
  at dispatchEventImpl_0_g$
  at dispatchEvent_4_g$
  at dispatchEvent_6_g$
  at apply_0_g$
  at entry0_0_g$
  at <anonymous>
Caused by: java.lang.NumberFormatException: For input string: "a"
  at fillInStackTrace_0_g$
  at Throwable_2_g$
  at Exception_2_g$
  at RuntimeException_2_g$
  at IllegalArgumentException_2_g$
  at NumberFormatException_2_g$
  at forInputString_0_g$
  at __parseAndValidateDouble_0_g$
  at parseDouble_0_g$
  at Double_2_g$
  at valueOf_68_g$
  at onClick_109_g$
  at dispatch_6_g$
  at dispatch_7_g$
  at dispatch_1_g$
  at dispatchEvent_2_g$
  at doFire_0_g$
  at fireEvent_2_g$
  at fireEvent_1_g$
  at fireEvent_3_g$
  at fireNativeEvent_1_g$
  at onBrowserEvent_2_g$
  at dispatchEventImpl_0_g$
  at dispatchEvent_4_g$
  at dispatchEvent_6_g$
  at apply_0_g$
  at entry0_0_g$
  at <anonymous>

OnModuleLoad I am cacthing exceptions:

GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() {
        @Override
        public void onUncaughtException(Throwable e) {
            GWT.log(e);
        }
    });

How can I get stackTrace? I tried something like this https://stackoverflow.com/a/24334132/1660637 but couldn't manage to work.

Did you try adding these into your gwt.xml file?

<set-property name="compiler.stackMode" value="emulated"/>
<set-configuration-property name="compiler.emulatedStack.recordLineNumbers" value="true"/>
<set-configuration-property name="compiler.emulatedStack.recordFileNames" value="true"/>

There is an open issue for SuperDevMode, stacktraces and the use of GWT.log . Also there seem to be improvements in GWT 2.8.

As far as I know if you use the normal java.util.logging instead of GWT.log you should get stack traces in SDM.

Call the below method from your onModuleLoad. Note that you must use java.util.Logging for this to work. GWT.log does not work correctly for exceptions.

/** * Set an uncaught exception handler that unwraps the exception * (UmbrellaException) for SuperDevMode. */ private void setUncaughtExceptionHandler() { GWT.setUncaughtExceptionHandler(new GWT.UncaughtExceptionHandler() { @Override public void onUncaughtException(Throwable e) { Throwable unwrapped = unwrap(e); BootBox.error(I18NMessages.getMessage(3774) + "\\n\\n" + unwrapped); LOGGER.log(Level.EXCEPTION, "onUncaughtException " + e.getMessage(), unwrapped); }

     public Throwable unwrap(Throwable e)
     {
        if (e instanceof UmbrellaException)
        {
           UmbrellaException ue = (UmbrellaException) e;
           if (ue.getCauses().size() == 1)
           {
              return unwrap(ue.getCauses().iterator().next());
           }
        }
        return e;
     }
  });

}

And the LOGGER is create in the following way

public static final Logger LOGGER = Logger.getLogger("Something");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM