답이 보이지 않는 문제를 해결했던 과정 - Hoto-Mocha/Re-ARranged-Pixel-Dungeon GitHub Wiki

  1. 먼저 문제가 발생한 환경을 분석한다.

문제는 모바일 환경에서 가로화면일 때 영웅 선택을 하면 프리징이 발생하는 문제였다.

  1. 다음으로 해당 문제 발생 시 어떤 로그가 발생하는지 확인한다.

문제 발생 시 콘솔에 JNI critical lock held for 26.984ms on Thread[18,tid=11924,Runnable,Thread*=0x79bff02c00,peer=0x15800768,"GLThread 102692"]라는 로그가 출력되는 것을 확인했다.

  1. 로그가 발생되는 원인을 분석하기 위해 해당 오류에 대한 검색을 실시한다.

로그 문장을 검색하기도 하고, 챗gpt에게 물어보기도 하였으나 해당 문제는 광범위한 조건에서 발생할 수 있음을 깨달았다.

  1. 문제가 발생하는 코드를 비활성화하고, 정상 작동하면 차례로 활성화하면서 문제가 발생하는 정확한 지점을 파악한다.

그 결과 while문에서 무한 반복 문제가 발생할 수 있음을 깨닫고, 챗gpt에게 교차 검증하여 반복문의 무한 반복에서 JNI critical lock이 발생할 수 있다는 사실을 알았다.

  1. 문제를 해결하기 위한 방법을 찾는다.

반복문을 빠져나오기 위해서는 while이 동작하는 조건을 만족하지 않으면 되었으나, 새로운 클래스를 추가하며 클래스 선택 버튼이 너무 많이 내려간 탓에 버튼의 위치 조건이 항상 만족하는 문제가 있었다.

  1. 문제를 해결한다.

버튼의 크기를 작게 함으로써 버튼의 위치 조건이 만족하지 않게 만들어 해결했다.