Listener 인터페이스 추가가 필요한 구현 등의 virtual function 사용시 주의가 필요하다. pure virtual 로 지정해주거나 구현부가 존재하면 당연히 문제없이 빌드 및 실행이 되겠지만, 그렇지 않은 경우에는 빌드 에러없이 앱 인스톨 후 실행시점에서 바로 앱크래쉬가 발생한다.
App crash Info Downloading
crashinfo.txt, stackFrame.txt 로그를 봐서는 해당원인을 찾을 수 없고, 해당 프로젝트가 어느정도 진행이 되면서 소스가 늘어난 상태라면 virtual function 문제임을 파악하기는 더 까다로워진다.
PROBLEM
아래 코드의 경우, ThreadImplListener 의 OnRun 에서의 링크 에러 없이 정상 빌드되고, 앱 실행시 크래쉬 되는 문제가 발생한다.
class ThreadImplListener { public: virtual void OnRun(void); };
class TestForm : public ThreadImplListener { public: virtual void OnRun(void); } void TestForm::OnRun(void) { // Do something... }
SOLUTION
pure virtual 로 지정 해주거나 구현부를 선언해주자.
class ThreadImplListener { public: virtual void OnRun(void) = 0; };
class ThreadImplListener { public: virtual void OnRun(void) {} };
...
그렇다. 바다 개발을 하면서 이런 링크 에러를 기대하는 건 사치다.
반응형
댓글