1

我添加了一个带有以下代码的 UncaughtExceptionHandler:

        GWT.setUncaughtExceptionHandler(new   
          GWT.UncaughtExceptionHandler() {  
          public void onUncaughtException(Throwable e) {  

              StackTraceElement[] elements = e.getStackTrace();

              String stackTrace = "";
              for (int i = 0; i < elements.length; i++)
              {
                  stackTrace += elements[i] + "\n";
              }

              PlatformServices.instance().log().debug("caught unhandled exception: " + e + " ; Stack:\n" + stackTrace);
          }
        });

问题是只有每个 StackTraceElement 的函数名是有效的。所有其他信息都是默认的,例如 -1 表示行号或未知的类名。

我想知道我是不是做错了什么?

4

2 回答 2

2

此信息可能只是在 GWT 应用程序执行期间不可用。检查核心StackTraceElement.java类,方法toString()。的值lineNumber仅在 >= 零的情况下才打印出来。它也不是不可能的,它可以是负面的。

我的测试UncaughtExceptionHandler给了我完全相同的结果(在运行时没有引用行号)。在混淆模式下编译时,我什至无法获取文件名,因此输出如下所示:

com.google.gwt.core.client.JavaScriptException: (TypeError): Cannot read property 'g' of null 
Unknown.iPb(Unknown Source) 
Unknown.gPb(Unknown Source) 
Unknown.npd(Unknown Source) 
...

不是真正的解决方案,但至少你并不孤单:)。

于 2012-10-24T18:51:43.113 回答
1

尝试在您的模块文件中设置它

<set-property name="compiler.stackMode" value="emulated" />
于 2012-10-24T18:27:34.447 回答