小编Gui*_*eau的帖子

无法对GWT堆栈跟踪进行反混淆处理

我们正在尝试将未被捕获的GWT异常(我们使用GWT 2.5 rc1)发送到我们的服务器以进行日志记录和调试.我们想要对异常堆栈跟踪进行反混淆处理,否则它将毫无用处.

经过一些调查,我在GWTWebModeExceptions中找到了7个包含有价值信息的异常处理技巧.

因此,我们创建了一个GWT UncaughtExceptionHandler,它使用自定义RPC服务来传输带有堆栈跟踪的异常.这很好.

WebModeExceptions反混淆部分所述,我们在GWT模块中启用了堆栈跟踪仿真:

<set-property name="compiler.stackMode" value="emulated" />
<set-configuration-property name="compiler.emulatedStack.recordLineNumbers"
    value="true" />
Run Code Online (Sandbox Code Playgroud)

现在我们的堆栈跟踪看起来像这样:

com.google.gwt.core.client.JavaScriptException: (TypeError) : Cannot call method 'pp' of null
    Unknown.aT(Unknown Source:174)
    Unknown.AVa(Unknown Source:501)
    Unknown.YF(Unknown Source:29)
    Unknown.Lqb(Unknown Source:138)
    ...
Run Code Online (Sandbox Code Playgroud)

对我来说似乎没问题,因为它包含混淆的方法名称和行号,这似乎是WebModeExceptions反混淆部分中描述的所需内容.

然后我们使用-extra参数编译GWT模块以获取symbolmaps.

我们的自定义日志服务使用symbolMaps目录来调用com.google.gwt.logging.server.StackTraceDeobfuscator.我们使用X-GWT-Permutation http头来调用反混淆器.我介入了deobfuscate方法,以确保它可以加载符号映射.它可能.我验证了使用的symbolMap文件名与GWT模块的*.cache.js文件名匹配.它确实匹配.

所以基本上,服务这样做:

// Create the deobfuscator
String dir = getSymbolMapsDirPath();
StackTraceDeobfuscator deobfuscator = new StackTraceDeobfuscator(dir);

// request is the HttpServletRequest
String strongName = request.getHeader(RpcRequestBuilder.STRONG_NAME_HEADER);

// Deobfuscate the …
Run Code Online (Sandbox Code Playgroud)

java gwt

15
推荐指数
1
解决办法
3793
查看次数

标签 统计

gwt ×1

java ×1