如何找出哪个类打印了错误?

3

我有一个使用Vertx 2的Java程序,当我运行它时,会收到以下信息:

% vertx run -cluster com.abc.prep.manager.PrepStartup -cp ./build/libs/Operational-all-1.0.jar -conf safe.conf
Starting clustering... 
No cluster-host specified so using address 172.17.0.1 
[Fatal Error] :6:3: The element type "hr" must be terminated by the matching end-tag "</hr>".
Prep Starting up!
Succeeded in deploying verticle 

我无法确定那个"[致命错误]"消息来自哪里。如果有人知道vertx在做什么(因为我认为它是从那里来的),那就太好了。

但我的真正问题是:我如何找出是谁打印的?哪个jar包中的哪个类?我似乎无法设置一个可以捕获它的System.out或System.err断点(我正在使用Intellij)。我能否覆盖所有输出,使其打印堆栈跟踪?


看起来你发送了一条消息,但回复不是 XML。如果你有一个安全系统拦截请求并自动重定向到登录页面,则会出现这种情况。IBM TAM 就是其中的一个例子。 - DwB
1个回答

1
我该如何找出是谁在打印?我无法就Vertx 2提供具体信息,但我曾经追踪过许多神秘的错误。这是我的一般模式,尽可能应用于你的问题:
1. 先了解错误是什么。在错误消息中搜索静态元素(对于任何人都相同)。在这里,可能是“必须由匹配的结束标记终止”。将“vertx”添加到查询中给我带来了一些链接,但我没有看到任何即时答案。我发现它可能是XMLStreamException。您可以在此处设置断点。
2. 如果第一步不起作用,请按文本搜索您的代码库,寻找相同的静态文本。根据您的Google调查结果,您应该能够将任何结果缩小到可管理的数量以进行检查。
3. 如果搜索结果为空,请确保已为模块中的所有内容附加源文件。然后重试第二步。
4. 找到导致错误的代码后,您应该可以设置断点。

好的,我已经缩小了范围。看起来这是一个XMLStreamException;然而,<hr>不在任何代码或XML中(在我的或JAR文件中)。这似乎是由于一个XML文件中的模式引用无法解析,导致返回错误消息。感谢您的帮助。 - C Dorman
1
看起来有一个对Hazelcast的调用。通过Wireshark可以看到一个HTTP调用:http://hazelcast.com/version.jsp?version=3.2.3。响应返回一个“301 Moved Permanently”状态,并且其中包含:<hr><center>nginx</center>\r\n</body> 这段代码缺少闭合的</hr>标签。 - C Dorman
1
根据您在hazelcast中的配置和版本控制的自信程度,您可以将hazelcast.version.check.enabled设置为false。我相信这将停止检查。(https://groups.google.com/forum/#!topic/hazelcast/9jKfh6-vLbQ)。此外,我认为调用应该是到此URL http://versioncheck.hazelcast.com/version.jsp?version=3.2.3 - Jeutnarg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接