在我的项目中,我使用 log4j 来记录错误和许多框架:AOP、spring 等。
当我在堆栈跟踪中发现调用位于第一行时,这意味着什么,例如:
com.foo.bar.MyException: Error
at com.foo.bar.MyClass.handleException(MyClass.java:92)
at com.foo.bar.MyClass.myMethod(MyClass.java:76)
at com.foo.bar.MyClass.myMethod(MyClass.java:1) // <- here ???
...
在第一行中,我的类是注释,并且所有内容都已正确编译
MyClass.java:
/* Copyright 2011 */
package com.foo.bar;
import ...
public class MyClass implements MyInterface {...
最佳答案
我在调试过程中也看到过这种现象 - 单步执行方法有时会先跳到声明类的第一行,然后再跳到实际方法。由于无法给您提供引用,我认为这与某些情况下重写方法的分派(dispatch)有关(协变返回类型至少是一种)。在这些情况下,编译器需要插入一个合成桥接方法,该方法在“真实”方法之前被调用,我的猜测是该方法的有效行号为 1。
无论如何,我认为您不必担心 - 正如您所看到的,您自己的 myMethod
实现随后立即在第 76 行成功调用。
关于java - 从堆栈跟踪 : "MyClass.java:1" 中的第一行调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5258943/