0

是否可以通过堆栈帧访问方法参数?

由于我一直在从事的一个项目,我遇到了这种需求。如果发生异常,我想做一些日志记录。如果可能的话,我想递归地记录一个方法的名称和参数,直到我到达“上层”。

这是一个小例子:

class Parent{

    public int parentMethod(int param1) {
        String param2;
        Child child = new Child();
        (...)some Work(...)
        int ret = child.childMethod(param1, param2);
        (...)some More Work(...)
        return ret;
    }
}


class Child{
    public int childMethod(int param1, String param2) {
        (...) do more stuff (...)
        try {
            (...) this might generate an exception(...)
        }catch(Exception e) {
            (...) log method name and parameters value(...)
        }
    }
}

因此,在这种情况下,我想记录以下内容:-childMethod: param1 value, param2 value- -parentMethod: param1 value-

4

1 回答 1

2

我认为你有一个根本问题。对于除原语以外的任何东西,都传递参数引用。因此,方法可以更改传递给它的参数值。简单的堆栈遍历并不能解决这个问题。

我注意到您上面的示例使用了原语和不可变对象。但是我怀疑你需要一个更通用的解决方案。也许某种 AOP 解决方案可能会奏效,但您仍然必须在调用方法时复制对象(以便记录它们),我预见到一个悲伤的世界。

于 2012-10-26T16:04:59.037 回答