gpt4 book ai didi

java - GWT 2.6.1 + SuperDevMode : stack traces are not deobfuscated on server

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:35 25 4
gpt4 key购买 nike

直到今年 5 月,我一直在使用 GWT 2.5.1simple DevMode,并且能够使用堆栈跟踪发送混淆的异常< strong>根据this brilliant article使用符号映射到服务器并对其进行反混淆 .这对我帮助很大。

自 6 月以来,我成功切换到 GWT 2.6.1SuperDevMode,与 simple DevMode 相比,它提供了相当不错的体验,并且更易于使用.

但是,我注意到我的堆栈跟踪不再在服务器上正确反混淆。即使在去混淆之后,我仍然会收到混淆的堆栈跟踪信息。

*.gwt.xml文件相关内容如下:

<module rename-to="somemodule">

<!-- inherits, stylesheet, entry-point, source elements are going here -->

<add-linker name="xsiframe" />

<extend-property name="locale" values="uk" />
<set-property-fallback name="locale" value="uk" />

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

<set-property name="gwt.logging.logLevel" value="INFO" />
<set-property name="gwt.logging.enabled" value="TRUE" />
<set-property name="gwt.logging.developmentModeHandler" value="ENABLED" />
<set-property name="gwt.logging.systemHandler" value="DISABLED" />
<set-property name="gwt.logging.popupHandler" value="DISABLED" />
<set-property name="gwt.logging.consoleHandler" value="ENABLED" />
<set-property name="gwt.logging.firebugHandler" value="ENABLED" />
</module>

以下是处理客户端异常的服务器端代码:

import static com.google.gwt.user.client.rpc.RpcRequestBuilder.STRONG_NAME_HEADER;
import com.google.gwt.core.client.impl.SerializableThrowable;
import com.google.gwt.logging.server.StackTraceDeobfuscator;

// ....

@Override
public void logClientException(final SerializableThrowable ex, final String userAgent, final String platform, final String moduleName) {
final HttpServletRequest request = getThreadLocalRequest();

final String symbolMapsDirectory = "webapps/" + getTomcatWebappFolder(request.getServletContext()) + "/WEB-INF/deploy/" + moduleName + "/symbolMaps";
final String permutationName = request.getHeader(STRONG_NAME_HEADER);
final Throwable original = new StackTraceDeobfuscator(symbolMapsDirectory).deobfuscateThrowable(ex.getThrowable(), permutationName);

logClientException(original, userAgent, platform);
}

GWT 2.5.1 转移到 GWT 2.6.1 时,我是否遗漏了什么?

非常感谢您的帮助!

最佳答案

这是一个不幸的已知问题。参见 herehere .

问题是每次重新编译都会创建一个全新的增量目录树(参见 compile-1、compile-2 等子目录)。因此,正在运行的应用程序服务器(托管您的 servlet 的服务器)将无法获取正确的 compile-x/extras/<module-name>/symbolMaps。与调用 setSymbolMapsDirectory 一起使用的目录(正如@Vadim 指出的那样)。当然,复制这样的 PITA 很不错 symbolMaps每次重新编译时都在预期的目录中(我什至不确定它是否适用于排列名称)。

这与 GWT-RPC 相同在 SuperDevMode 时代的开始,但不同之处在于代码服务器 (SDM) 现在直接公开所有这些 *.gwt.rpc 输出文件,如果 gwt.codeserver.port使用 java 标志时,您的 servlet 将自动下载策略文件(仅在本地主机中,并且 GTW >= 2.5.1)。

无论如何,重点是让代码服务器也公开/服务symbolMaps文件(已经以某种方式通过点击 http://localhost:9876/sourcemaps/<module-name>/gwtSourceMap.json 但仅针对源 map 而不是 StackTraceCreator 可理解的方式)以某种方式,如第一期所述。

幸运的是,在开发过程中,堆栈跟踪并不是那么糟糕

关于java - GWT 2.6.1 + SuperDevMode : stack traces are not deobfuscated on server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24636439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com