在编译的GWT中调试异常?

时间:2015-09-14 00:38:03

标签: gwt

我在GWT中遇到NoSuchElementException,我不知道它来自哪里。

我已经探讨了很多关于如何在GWT中获取异常堆栈跟踪的提示,但没有任何工作。我的解决方案如下(尽管我欢迎任何更简单的方法!)

1 个答案:

答案 0 :(得分:0)

注意:我在OS X Yosemite上运行chrome版本45.0.2454.85(64位),使用GWT 2.7.0。我不知道这是否适用于其他任何事情。

我的解决方案最终是将这段代码放在我的onModuleLoad函数的开头:

native void openDebuggerWhenExceptionsCreated() /*-{
    window['captureStackTrace'] = function(throwable, reference) {
        debugger;
    };
}-*/;

public void onModuleLoad() {
    openDebuggerWhenExceptionsCreated();
    ...

然后在编译的javascript模式下运行(使用-style PRETTY),在chrome中打开应用程序,打开控制台(对我来说是mac,命令+选项+ i),然后重现错误。如果它命中调试器;语句在控制台打开时,然后chrome的调试器就会中断。

这是有效的,因为当GWT创建异常时,它会调用captureStackTrace()函数,我们在此处替换它。对我来说,如果它什么也不做,为什么这个功能存在仍然是一个谜,但不管怎样,覆盖它似乎是安全的。

需要window['captureStackTrace']而不仅仅是captureStackTrace,因为如果GWT看到我们使用该名称的变量,GWT实际上会更改其自己的captureStackTrace的名称。