Stack Overflow 에러

블루투스 통신을 위한 ESP32 보드를 개발하고 있는데, 스택 오버플로우 에러가 났다. 시리얼 창에 출력되는 에러는 철저하게 컴퓨터 기준이어서 어디서 난 건지 감도 안잡혔다. 코드를 살펴봐도 안보인다. 스택 오버플로우 에러가 발생하면 ESP32는 계속해서 리부팅된다. 시리얼 프린트 디버깅으로도 해결불가. 그래서 구글링하다가 Esp Exception Decoder을 발견하였다.

guru meditation error core 1 panic'ed (loadprohibited). exception was unhandled.

image

컴퓨터가 아닌 이상 해독할 수 없는 오류.. 이 오류를 해석해주는 게 Esp Exception Decoder의 역할이다.


Esp Exception Decoder 설치

https://github.com/me-no-dev/EspExceptionDecoder

위의 깃허브로 들어가면 설치 방법이 잘 나와 있다.

  1. Arduino IDE에 ESP32 보드가 설치되어 있어야 한다.
  2. 다운로드 페이지에 접속해서 EspExceptionDecoder-1.1.0.zip을 다운 받는다.
  3. 압축을 풀고 <home_dir>/Arduino/tools/EspExceptionDecoder/tool/EspExceptionDecoder.jarjar파일을 집어 넣는다.

    • 나는 Window10환경 기준으로 다음 경로에 넣어주었다.
    • C:\Users\<UserName>\Documents\Arduino\tools\EspExceptionDecoder\tool
    • Arduino폴더 안에 tools가 없어도 그냥 생성하면 된다.
  4. 아두이노 IDE 껐다 키기

image

짠! Esp Exception Decoder가 툴 메뉴에 추가된 걸 확인할 수 있다.


Esp Exception Decoder 사용

사용 방법은 굉장히 간단하다.

  1. 스케치를 컴파일하고 업로드한다.
    • 컴파일, 업로드를 안하는 경우 elf파일을 선택하라고 뜨기 때문에 바로 시리얼 창 키지 말고 컴파일 업로드를 먼저 한다.
  2. 시리얼 창에 뜬 스택 오버플로우 오류를 복사한다.
  3. 툴 > ESP Exception Decoder를 열어 오류를 붙여 넣는다.
  4. 에러가 발생한 곳을 확인한다.

image

짠! 위와 같이 오류를 복사하면 어떤 코드의 몇 번째 줄에서 발생한 오류인지 알려준다. 역시나 컴퓨터는 거짓말을 하지 않고 틀린 건 나였다 :( BLECharacteristic 객체를 선언만 해놓고 createCharacteristic()를 생략하고 냅다 setValue()를 해서 스택 오버플로우가 발생했던 것….

Reference