JAVA或者C#中如何获取并输出调用堆栈上的变量值?

liyin_first 2009-06-18 11:09:40
有这样一个需求:
当程序崩溃抛出异常的时候,想把调用堆栈中的变量值都答应出来,方便查找错误。不知道eclipse调试的时候,是怎么做到查看变量值的?

在晚上搜索了半天都没有满意的结果,希望高手能够给个方案,或者是一个思路就行!

谢谢!!
...全文
276 点赞 收藏 15
写回复
15 条回复
mary_zhang_YINNG 2009年07月02日
试试用log来获取运行程序的信息
回复 点赞
joyoo_cn 2009年07月02日
用断点,然后单步靠近异常抛出点,就可以读debug视图中的变量值了。
回复 点赞
angel6709 2009年06月22日
ding
回复 点赞
iefus 2009年06月21日
沙发
回复 点赞
holsten32 2009年06月20日
回复 点赞
liyin_first 2009年06月19日
to yejinson,这位朋友没有理解我的意思吧。我再详细说一下需求。
比如一段代码
class C {
int i;
void A() {

}
}
//另外一段调用代码
try {
C c = new C();
c.A();
}
catch(Excetion e) {
//如何在这里获取到变量c的值
}

回复 点赞
zhouzongjiu 2009年06月18日
顶一个
回复 点赞
bigbug9002 2009年06月18日
用e.printStackTrace();

如果你是说你程序中的用到的堆栈,可以在finally{}块中把堆栈的内容输出来。
回复 点赞
fosjos 2009年06月18日
估计是直接调用jvm的吧
不过程序崩溃抛出异常,已经退出了,不可能再去访问堆栈了
回复 点赞
qsrock 2009年06月18日
帮顶一个!看debug的源码是怎么写的!
回复 点赞
让爱延续 2009年06月18日
我学C#的,在vs2005的开发环境中设断点,可以使用单步执行,每执行一步看一下局部变量就可以了!

在eclipse中也能这样执行的, 好像有个叫 什么debug的就是
回复 点赞
yejinson 2009年06月18日
堆栈你都得到了, 还搞出来?
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();
}
这些不是可以操作了吗, 楼上有个朋友已经说了吗
回复 点赞
liyin_first 2009年06月18日
ms无法解决。。。
方法调用堆栈可以得到,但是具体里面的变量值这才是我想要得到。
自己顶一下
回复 点赞
laorer 2009年06月18日
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();
回复 点赞
发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告