如何找到哪个 class 正在打印错误?

How do I find which class is printing an error?

我有一个 Java 程序,使用 Vertx 2,当我 运行 它时,我收到一条消息:

% 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 在做什么(因为我认为它来自那里),那就太好了。

但我真正的问题是:我如何找出谁在打印它?什么 class 在哪个罐子里?我似乎无法在捕获它的 System.out 或 System.err 中设置断点(我正在使用 Intellij)。我可以覆盖(所有)输出以便打印堆栈跟踪吗?

你怎么知道是谁在打印那个?我无法谈论 Vertx 2 的具体细节,但我不得不追踪大量神秘的错误。这是我的一般模式,尽可能适用于您的模式:

  1. 了解错误是什么。 Google 错误消息中的静态(对任何人都一样)元素。在这里,可能是 "must be terminated by the matching end-tag"。在查询中添加 "vertx" 给了我一些链接,但我没有看到任何即时答案。我确实发现它可能是一个 XMLStreamException。您也许可以在上面设置断点。
  2. 假设这不起作用,请按文本搜索您的代码库,查找相同的静态文本。借助 Google 调查中的知识,您应该能够将任何结果缩小到可管理的数量以进行检查。
  3. 如果您的搜索没有找到任何内容,请确保您已为模块中的所有内容附加了源文件,您可以为其获取源文件。然后重试步骤 2。
  4. 找到引发错误的代码后,您应该可以设置断点。