print stack trace(caller, callee가 알고 싶은 경우 등...) 본문

Programming/Java

print stack trace(caller, callee가 알고 싶은 경우 등...)

halatha 2011. 3. 31. 01:02
JUnit test method에서 caller가 main인 경우에는 swing 화면을 출력, JUnit test인 경우에는 출력하지 않도록 하는데 사용했음
class TestStackTrace
{
	static class TestInnerStackTrace
	{
		//	http://blog.naver.com/clean820818/10086133151
		public static void method()
		{
			//	print current class method
			StackTraceElement[]	stacks	=	new Throwable().getStackTrace();
			StackTraceElement	currentStack	=	stacks[0];
			System.out.println( "my class : " + currentStack.getClassName() );
			System.out.println( "my method : " + currentStack.getMethodName() );  
			 
			//	print previous class method
			StackTraceElement[]	pstacks	=	new Throwable().getStackTrace();
			StackTraceElement	beforeStack	=	pstacks[1];
			System.out.println( "my before class : " + beforeStack.getClassName() );
			System.out.println( "my before method : " + beforeStack.getMethodName() );  
			 
			//	print the number of stack
			StackTraceElement[]	nstacks	=	new Throwable().getStackTrace();
			System.out.println("stacks.length:" + nstacks.length);
		}
	}

	public static void main(final String[] args)
	{
		//	http://cafe.naver.com/javacircle/37856
		System.out.println("Printing stack trace:");
		StackTraceElement[]	elements	=	Thread.currentThread().getStackTrace();

		for ( int i = 1; i < elements.length; ++i )
		{
			StackTraceElement	s	=	elements[i];
			System.out.println("\tat " + s.getClassName() + "." + s.getMethodName() +
				"(" + s.getFileName() + ":" + s.getLineNumber() + ")");
		}

		TestInnerStackTrace.method();
	}
}
Comments