자바에서 stack info, argv[0]
글쓴이: jj / 작성시간: 월, 2004/05/10 - 11:48오전
안녕하세요?
Java에서 현재 stack의 정보를 알 수 있는지요?
method내부에서, 자신을 호출한 method를 알고 싶은 상황입니다.
단순한 reflection은 동적인 정보는 제공하지 않는것으로 보이는데...
또, argv[0]은 보통 어떻게들 쓰세요?
C에서라면
int main(...argc...argv...) { print("Usage: %s [options....]...", argv[0], ...) }
아시겠지만, Java에서는 argv[0]이 없죠.
public class SomeUtil { public static void main(String[] args) { System.out.println("Usage: " + ??? + " ..."); // how??? } }
어떤 대안이 있을까요? 클래스 이름을 하드코딩하니, 가끔 클래스 이름 바뀔때가 있어서... 음... SomeUtil.class.getName()이 가장짧은건지?
Forums:
Thread.dump();
Thread.dumpStack(); 을 호출하세요. static method 입니다.
실행화일 이름은 java.exe 니까 별 의미가 없는거 같구요.
Main 클래스의 이름은 getClass().getName() 정도면 될거 같습니다만. 제가 의도를 잘못파악했을거 같군요.
Re: Thread.dump();
음... stdout으로 그냥 출력해주는 method이군요. 자료구조를 리턴해주는 함수는 역시 없는건가요?
그런데 getClass가 instance method라서요. 음... 답변 감사드립니다~
--
Life is short. damn short...
[code:1]public class Asdf{ pu
제가 문제를 맞게 이해한건가요?
음... 그냥 SomeUtil.class.getName()하면 됩니다.
음... 그냥 SomeUtil.class.getName()하면 됩니다. 호출자의 정보를 얻는 방법은 윗분께서 말씀하신 Thread.dumpStack()을 쓰시거나 프로그램적인 접근을 원할 경우 Exception를 하나 만들어서 getStackTrace()로 가져오면 됩니다.
근데 호출자의 클래스명을 원하시는 이유가 단지 사용법을 찍기 위한 거라면 좀 오버 같네요... 차라리 class.getName()으로 끊어 오는게 더 좋은 방법 같습니다.
(솔직히 저 정도면 리소스 같은데 하드코드해도 별 무리는 없습니다. 어차피 메인 클래스명이 수시로 바뀌는 프로젝트는 문제가 있는 프로젝트니까요...)
----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...
...
현재의 workaround는 이렇게 사용하고 있긴한데, 문제는 getStackTrace가 1.4에서 추가된것이라... 아직1.3과의 호환성이 필요한상황입니다. 제 질문의 컨텍스트가 좀 모잘랐군요.
답변 감사합니다.
--
Life is short. damn short...
getStackTrace()
1.4가 아니면 그 Stack Dump 찍은걸 Parsing 해서 쓰기도 하더군요. 자바월드에서 봤던거 같은데.. 구글하시면 나올거 같네요. 근데 아무래도 조잡하죠 :shock:
호출 method를 아는 방법은 아니지만, 스택에 있는 class con
호출 method를 아는 방법은 아니지만, 스택에 있는 class context는 SecurityManager를 extends해서 알아 볼 수 있습니다. 결과값을 보시면 쉽게 이해를 하실거라 ....
결과 :
I'm here
0 DummySM
1 Test
2 Test
참고로, SecurityManager는 abstract여서 인스턴스를 생성할 수 없고, System.getSecurityManager().getClassContext()는 protected입니다.
----
I paint objects as I think them, not as I see them.
atie's minipage
댓글 달기