2012-01-20 3 views
0

웹 응용 프로그램이 있습니다 (때로는 거의 하루에 몇 번씩) 오류가 발생합니다. 그것은 Tomcat에 배치되고, Spring + Hibernate를 사용하며, 에러는 Hibernate 예외에 의해 이 발생한다. 이는 실제로 매개 변수를 Hibernate 클래스의 메소드에 전달하지 않고는 이해하기 어렵다. Hibernate 라이브러리를 으로 바꿀 수는 없으며 "beans"가 관리되지 않기 때문에 spring-aop 을 사용할 수 없다. 나는 바이트 코드 계기를 보았는데, http://today.java.net/pub/a/today/2008/04/24/add-logging-at-class-load-time-with-instrumentation.html에 바람둥이에서 실행하려고했지만, 계측기 코드는 현재 클래스 폭로 문제로 인해 실행되지 않는 것 같습니다. 현재 제가 이해하지 못하는 입니다.외부 라이브러리를 수정하지 않고 tomcat 아래에서 디버그

나는 무엇을 묻는가? 누군가가 좀 더 간단한 방법으로 계측 할 수 있습니까? 외부 라이브러리에있는 메소드의 매개 변수를 로깅하는 것과 같은 작업을 할 때 tomcat 아래에 바이트 코드가 있습니까? 이 문제에 대해 더 많은 통찰력을 줄 수 있습니까?

+0

* "아주 드물게, 하루에 여러 번"* ... 어느 쪽인가요? :) – TacticalCoder

+0

을 하루에 여러 번 생산하므로 테스트 환경에서 재생산하기가 쉽지 않습니다. –

답변

2

BTrace을 살펴보십시오.

메인 애플리케이션의 속도를 늦추지 않고도 다른 클래스/기능에 대한 호출을 기록 할 수 있습니다.

+0

이것은 매우 강력 해 보입니다. 실제로 내 문제를 해결하지는 못했지만 webapp가 Java 6에서 실행되고 Java 5에서 실행되지 않는 경우도있었습니다. :) –

1

프로덕션 Tomcat에서 임시로 enable JDWP을 수행하고 디버거를 연결 한 다음 잘못된 코드에 중단 점을 배치 할 수 있습니다. 그러나 실제 제작 시스템에서는이를 수행하지 않는 것이 좋습니다. 생산 환경을 복제 할 수있는 다른 머신으로 복제하는 것이 좋습니다.

+0

도서관 코드를 다운로드하는 것을 잊지 마세요! –

+0

YouDebug (http://youdebug.kenai.com/)에서 외부 라이브러리 소스로 IDE를 실제로 설정하지 않고 JDK (디버깅 인터페이스)를 활용하고 중단 점이 발생할 때 JVM을 중지 할 수 있습니다 . 대신 핸들러 코드는 중단 점에 도달 할 때 실행되고 예를 들어 검사 할 수 있습니다. 로컬 변수 등. 이것은 성능 서버가 YouDebug와 연결된 시간에 분명히 주목할 만하다하더라도 프로덕션 서버에서 사용하기에는 그럴듯합니다. –

관련 문제