假设我们有一个抽象类,它有一个打印警告日志条目的方法(警告:无法设置 header 。响应已经提交),这个方法被类 X 多次调用(它正在淹没日志) .
根据从应用服务器生成的日志条目,我设法识别了抽象类并找到了它的 jar(使用 jarscan),JAR 是应用服务器的 OOTB 组件,因此它不应该是任何意义上的修改。我破解了 JAR 并在生成日志条目的方法中引入了一行:
new Exception().printStackTrace()
这种方法应该给我堆栈跟踪来识别类 X。
但是,我不知道如何在我的测试环境中重现这个错误,我的工作区中有很多项目没有,我不能只检查数百个类来确定哪个是在响应对象中设置一些东西,我试图在日志条目时间戳和针对测试环境运行的 Selenium 测试报告之间找到匹配项,但它没有显示在日志中。
问题:在不对出现问题的环境进行任何侵入性更改的情况下,识别 X 类的良好故障排除方法是什么?
最佳答案
如果由于特定环境而无法使用调试器,则可以调查加载到服务器 JVM 中的类,并找到从抽象类继承的类。
运行 jvisualvm 并连接到服务器的 JVM,然后转到 jvisualvm 中的 OQL 控制台并运行这样的查询:
select heap.findClass("com.xyz.my.AbstractClass").subclasses()
这将找到当前加载的抽象类的所有子类。
关于java - 如何识别哪个类正在调用特定方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26038532/