Java 스택 트레이스에 정보를 추가 할 수 있습니까?Java 스택 추적에 사용자 지정 정보 추가
저는 스크립트 언어에 대한 인터프리터를 개발 중이며 자바 스택 트레이스에서 스크립트 코드의 해당 줄을보고 싶습니다.
출력은 다음과 같은 것을 볼 수 있었다 :
java.lang.NullPointerException
at package.IPF_Try.execute(IPF_Try.java:76) called in script.scr:155
at package.IPF_Block.execute(IPF_Block.java:304)
at package.IPF_If.execute(IPF_If.java:105) called in script.scr:130
at package.IPF_Block.execute(IPF_Block.java:304)
at package.IPF_Main.execute(IPF_Main.java:147)
...
나이 :
java.lang.NullPointerException
at package.IPF_Try.execute(IPF_Try.java:76)
--- called in script.scr:155 ---
at package.IPF_Block.execute(IPF_Block.java:304)
at package.IPF_If.execute(IPF_If.java:105)
--- called in script.scr:130---
at package.IPF_Block.execute(IPF_Block.java:304)
at package.IPF_Main.execute(IPF_Main.java:147)
...
이 불행하게도이를 달성하기 아무것도 찾을 수 없습니다 구글, 많은 디버깅을 쉽게 만들 것입니다.
내가 생각할 수있는 유일한 방법은 다이내믹하게 필요한 정보가 들어 있고 단순히 스택 트레이스에서 다음 메서드를 호출하는 메서드를 사용하여 많은 클래스를 생성하는 것이었지만 (permgen) 메모리 및 CPU주기.
흥미로운 질문입니다. Java 컴파일러는 파일 이름과 행 번호가있는 디버그 기호를 바이트 코드에 넣습니다. 당신이 바이트 코드를 엉망으로 만든다면, 당신의 필요에 더 잘 맞도록 조정할 수 있다고 생각합니다. JSP 컴파일러는 그런 식으로 일을합니까? – Thilo
@Thilo - 예 - JSP는 바이트 코드 (때때로 중간 자바 양식 사용)로 컴파일됩니다. 일반적으로 서버의 "작업중인"디렉토리를 샅샅이 뒤져서 컴파일 된 클래스를 찾을 수 있습니다. – McDowell
문제는 여러 스크립트에서 호출 되었기 때문에 내 메서드의 바이트 코드를 단순히 엉망으로 만들 수 없기 때문에 특정 정보를 추가 할 수는 없습니다. 그러나 메소드 이름이나 이와 유사한 메소드에 필요한 정보를 포함하는 클래스를 동적으로 생성 할 수는 있지만 성능에 미치는 영향에 대해 우려하고 있습니다. – ChristophK