목록디버깅 (3)
행복한 아빠
소프트웨어를 만들고 운영하면서 문제를 찾아 해결해야 하는 일이 일상입니다. 후배들이 문제를 찾는데에 어려움을 느낄 때 가끔 도와주는데 제가 보기에 그닥 좋지 않은 방법으로 문제해결을 하려고 합니다. 제가 문제를 해결하는 방법을 소개하려고 합니다. 문제해결 중 디버깅을 예로 들어 설명해 보겠습니다. 이미지출처 자주 발생하는 상황 디버깅할 때 많이 볼 수 있는 상황은 소스를 작성한 본인이 의심되는 구간을 열심히 살펴보고 테스트하는 경우입니다. 이럴 때 인지부조화 상태에 빠질 가능성이 높습니다. 특히 긴박하거나 압박이 오는 경우에 더하죠. 이런 상태라면 엉뚱한 다리를 긁는 경우가 발생합니다. 분명 고쳤는데 변화가 없지?? 하는 경우죠. 이럴 때 많이 하는 말이 이상하다. 이전에는 잘 되었는데. 처음 보는 현상..
0. 지혜롭게 살자 많은 개발자가 전통적(?)인 방법인 System.out....로 디버깅을 많이 하고 있다. 물론 이것처럼 확실한 방법도 없지만 eclipse나 다른 IDE의 디버그 기능을 이용하면 훨씬 빨리 문제를 찾을 수 있다. 특히 WAS에 배포된 환경에서 이런 방법으로 하려면 확인하기 위한 System.out...을 고칠 때마다 배포해야 하는데 이건 너무 고통스러운 작업이다. 단위 테스트시 에러가 발생했을 때는 eclipse등을 이용해서 디버깅하기가 수월하다. 그러나 WAS에 배포된 후에 에러가 발생했을 때는 약간의 작업이 필요하다. WAS를 eclipse에 embeded한 플러그인을 이용하는 방법도 있지만 WAS와 이클립스를 따로 띄워 원격으로 버그를 찾는 방법을 정리한다. 이럴 경우 서버환경..
어플리케이션에 문제가 있는 경우 문제가 되는 메소드를 누가 호출하지는 궁금할 때가 있다. 특히 운영중 평소에는 잘 돌다가 특정한 경우에 문제가 되는 메소드를 호출하여 장애가 발생하는 경우는 재현하기도 어렵고 추적하기도 매우 어렵다. 이런 경우 기본 Java Debugger인 jdb가 유용하다. (JDK에 기본으로 있다.) 상황1: 잘 돌던 웹 애플리케이션이 종종 죽는다. 물론 JVM 레벨에서 죽는 경우도 가끔있지만 이런 경우 대부분 core dump가 떨어진다. 그런데 dump도 떨어지지 않고 가끔 죽는 경우가 있어 혹시 개발자가 실수로 코드에서 System.exit를 호출하지 않았나 살펴보기로 하자. - WAS 디버그로 구동하기 먼저 WAS 구동 시 -Xdebug -Xnoagent -Xrunjdwp:t..