【问题标题】:Finding the Java actual stack trace from a javascript stack trace从 javascript 堆栈跟踪中查找 Java 实际堆栈跟踪
【发布时间】:2011-10-18 08:32:06
【问题描述】:

我们已经实现了一种通用机制,可以从 GWT 客户端记录服务器异常。 当然,其中一些是意外异常(例如 NPE),因此我们会在日志中获得这些堆栈跟踪(摘录):

java.lang.Throwable: 捕获到一个或多个异常,参见 UmbrellaException#getCauses 中的完整集 在 Unknown.Hq(未知来源) 在 Unknown.ihb(未知来源) 在 Unknown.anonymous(未知来源) 在 Unknown.anonymous(未知来源) 在 Unknown.anonymous(未知来源) 引起:java.lang.Throwable: (TypeError): d is null 堆栈:EG([object Object],[object Object])@http://domain/path/0B15791BA99231E6B88EAF3BDE38EB64.cache.html:3282 文件名:http://domain/path/0B15791BA99231E6B88EAF3BDE38EB64.cache.html 行号:3282 在 Unknown.EG(未知来源) 在 Unknown.DG(未知来源)

如何在原始java源码中找到类和行号?

我不想部署详细的编译版本,因为我没有关于确切场景的信息,也无法重现异常。

【问题讨论】:

  • 那么这是否意味着您需要为每个模块对记录器进行子类化并明确设置位置?

标签: gwt


【解决方案1】:

GWT 编译器在-deploy-extra 位置(其中-deploy 默认为-warWEB-INF/deploy-extra 默认不发出)中的符号映射文件中输出映射。
我不时使用它手动调试奇怪的东西。

您还可以使用StackTraceDeobfuscator 以编程方式对跟踪进行去混淆处理。
仅供参考,此类由 RemoteLoggingServiceImpl GWT-RPC servlet 和 Logging RequestFactory 服务使用;分别由SimpleRemoteLogHandlerRequestFactoryLogHandler 调用(它们是java.util.logging.LogHandlers,您可以与GWT 支持的logging API 一起使用)。在这种情况下,它会查看 webapp 的 WEB-INF/deploy(这就是 -deploy 默认存在的原因)。

【讨论】:

  • 我做了以下操作: 1. 在模块 xml 文件中添加了
  • 2.覆盖 RemoteLoggingServiceImpl 并调用 setSymbolMapsDirectory("WEB-INF/deploy/{Modulename}/symbolMaps/")。
  • 虽然它在文档中,但不必添加 -extra 选项。至少,我添加的时候并没有发现任何区别。
  • 现在日志堆栈跟踪显示 java 类名,仍然没有行号。我猜反混淆器只是使用符号映射替换符号,但它找不到确切的行号。
  • 是的,它只在方法级别精确。最近添加了 Source Maps,但尚未发布。见code.google.com/p/google-web-toolkit/wiki/SourceMaps
猜你喜欢
  • 1970-01-01
  • 2010-09-13
  • 2011-05-25
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
相关资源
最近更新 更多