StackTraceElement中没有行号

时间:2012-10-24 13:28:06

标签: gwt

我添加了一个带有以下代码的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,类名称为未知。

我想知道我做错了什么?

2 个答案:

答案 0 :(得分:2)

此信息可能在GWT应用执行期间不可用。检查核心StackTraceElement.java类,方法toString()。仅在{> 1}的情况下打印出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) 
...

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

答案 1 :(得分:1)

尝试在模块文件

中设置此项
<set-property name="compiler.stackMode" value="emulated" />