#20151214-02 :: C++ :: gcc에서 runtime crash의 stacktrace를 보려면?

아래 링크를 참고합니다.


http://stackoverflow.com/questions/77005/how-to-generate-a-stacktrace-when-my-gcc-c-app-crashes

#20151214-01 :: C++ :: "libc++abi.dylib: Pure virtual function called!"

gtest로 모듈을 작성하던 중 "libc++abi.dylib: Pure virtual function called!"라는 런타임 에러를 만났다.

콜스택 추척도 안되고 난감했었는데, 구글링을 해보니 생성자와 소멸자에서는 순수 가상함수가 호출되면 안된다고 한다.


코드의 생성자와 소멸자들을 확인해 보니

이 런타임 에러는 상속이나 소유관계에 상관없이 매우 광범위한 케이스에서 작동하는 듯 하다.


내 경우에는 객체가 네트워크 커넥션 객체를 추상 인터페이스로 소유하고 있는데,

(네트워크라는 것이 TCP, UDP, IPC, BT, Zigbee, UART 등 다양하니까...)

네트워크 추상 인터페이스의 Close() 함수를 소멸자에서 호출하기 때문에 발생했었다.


헛웃음이 나올 뿐 ... 허허


어떤 쓰레드에서는 리눅스에서는 이상 없는데

Mac OS X에서만 위 에러가 발생한다는 글이 있어 확인해볼 문제라고 생각한다.

뭐, 덕분에 큰 단위의 리팩토링이 불가피할 듯 ㅋ

#20151201-02 :: C++ :: mongoose web server에서 mg_enable_multithreading 사용

mongoose web server에서 mg_enable_multithreading 함수를 사용하려고 하면

해당 함수에 대한 링크 에러를 만나게 된다.

이유는 MG_ENABLE_THREADS 플래그가 define 되어있지 않기 때문이다.

컴파일 옵션에 위 플래그를 추가해 준다.

ex) POSIX: -DMG_ENABLE_THREADS