StackTrace ss = new StackTrace(true); String flName = ss.GetFrame(1).GetFileName();// GetMethod().DeclaringType; int lineNo = ss.GetFrame(1).GetFileLineNumber(); String methodName = ss.GetFrame(1).GetMethod().Name; 这是 C# 的调用栈上的内容, 至于具体变量值,不清楚.... java 中也有一个,StackTraceElement calledSte = getCallStackTraceElement(); int lineNo = calledSte.getLineNumber(); String className = calledSte.getClassName(); String methodName = calledSte.getMethodName();
堆栈你都得到了, 还搞出来? String var = "Hello World"; new Exception(var);StackTraceElement[] elements = e.getStackTrace(); e.getMessage(); // 变量var的值 for (int i = 0; i < elements.length; i++){ StackTraceElement element = elements[i]; element.getClassName(); element.getLineNumber(); element.getMethodName(); element.toString(); } 这些不是可以操作了吗, 楼上有个朋友已经说了吗
to yejinson,这位朋友没有理解我的意思吧。我再详细说一下需求。 比如一段代码 class C { int i; void A() {} } //另外一段调用代码 try { C c = new C(); c.A(); } catch(Excetion e) { //如何在这里获取到变量c的值 }
不过程序崩溃抛出异常,已经退出了,不可能再去访问堆栈了
String flName = ss.GetFrame(1).GetFileName();// GetMethod().DeclaringType;
int lineNo = ss.GetFrame(1).GetFileLineNumber();
String methodName = ss.GetFrame(1).GetMethod().Name;
这是 C# 的调用栈上的内容, 至于具体变量值,不清楚....
java 中也有一个,StackTraceElement calledSte = getCallStackTraceElement();
int lineNo = calledSte.getLineNumber();
String className = calledSte.getClassName();
String methodName = calledSte.getMethodName();
String var = "Hello World";
new Exception(var);StackTraceElement[] elements = e.getStackTrace();
e.getMessage(); // 变量var的值
for (int i = 0; i < elements.length; i++){
StackTraceElement element = elements[i];
element.getClassName();
element.getLineNumber();
element.getMethodName();
element.toString();
}
这些不是可以操作了吗, 楼上有个朋友已经说了吗
比如一段代码
class C {
int i;
void A() {}
}
//另外一段调用代码
try {
C c = new C();
c.A();
}
catch(Excetion e) {
//如何在这里获取到变量c的值
}