2018년 5월 24일 목요일

스택트레이스(stacktrace) 읽는 팁

자바는 에러 발생시 익셉션을 발생시켜서 에러가 발생한 위치를 정확히 알려준다.

스택트레이스는 꽤나 중요한 사항인데, 나 역시도 깊게 생각해 본 적이 없다.

그러다 okky 글을 읽고 내 나름의 스택트레이스 읽는 팁을 적어 본다.

 
1. lib 는 제외하고, 내 소스 부분만 본다.

2. 스택의 제일 윗 부분을 본다.

3. Caused by 가 있을 경우 제일 하단의 Caused by 부터 본다.

대부분의 경험있는 개발자라면 느낄 것이다. lib에서 에러가 발생하는 경우는 99%이상 없다고 본다.
에러의 대부분은 내가 짠 소스에서 발생한다.
개발할 때는 기본적으로 여러가지 라이브러리를 사용하기 때문에 스택이 복잡해 지는 데, 라이브러리를 제외하고 보면 꽤나 단순해 진다.

스택은 알다시피 First in Last Out (FILO)이다. 그렇기 때문에 제일 상단의 라인이 제일 마지막에 실행된 부분이고 이 부분이 에러인 경우가 가장 많다.

"Caused by: " 부분은 exception chaining 이 발생 할 때 나타나는 메시지이다.
제일 하단의 "Caused by: " 섹션에서 내 패키지가 없다면 패스, 있다면 해당 부분이 원인일 경우가 많다.

검색해 보니, 이런 부분을 이용하여 보기 스택트레이스를 보기 좋게 해주는 사이트도 있다.

참조
https://stackoverflow.com/questions/3988788/what-is-a-stack-trace-and-how-can-i-use-it-to-debug-my-application-errors
https://bukkit.org/threads/how-to-read-stack-traces-and-troubleshoot-your-own-plugins-by-yourself.32457/

2018년 2월 10일 토요일

Parameter index out of range (3 > number of parameters, which is 2)

mybatis 사용시 아래와 같은 에러 발생.

Parameter index out of range (3 > number of parameters, which is 2)

원인은 mybatis 변수 사용시 '를 사용하였기 때문이였다.
#before
AND reg_date BETWEEN CONCAT('#{start_search_date}', ' 00:00:00') AND CONCAT('#{end_search_date}',' 23:59:59')

#after
AND reg_date BETWEEN CONCAT(#{start_search_date}, ' 00:00:00') AND CONCAT(#{end_search_date},' 23:59:59')