며칠간 고생하던 문제를 드디어 풀어냈는데.
결국 gdb와 assert와 디버깅용 map으로.
무조건 gdb가 능사가 아님은, 실마리도 찾지 못하던 상황에서 결국 printf로 3200여개의 메모리 할당과 삭제를 모두 출력해서
두번의 삭제가 일어난다는 것을 찾아내고. 거들떠보지도 않던 DEBUG플래그와 assert문으로 중복삭제의 실마리를 풀다.
마지막엔 결국 gdb의 back-trace덕분이 컸지만.
문제의 시작은 “함수의 인자로 클래스를 넘길때 참조로 넘기지 않을경우 함수가 종료되며 클래스의 destructor를 호출함”이라는
기본적인 지식에서 기인한.
머 쨋던간에, 맨땅에 헤딩하는 것보다는 여러가지 디버깅툴을 이용하는 이유가 있으며
나름 DEBUG플래그와 assert그리고 gdb가 함께 사용될 경우 상당히 요긴하다는 것.
그리고 gdb 좋다고 printf무시하면 디버깅 시간이 쓸데없이 길어질 수 있다는 것.
더불어 버그 잡으려면 딴짓 줄이고 집중해서 바싹 잡고늘어져라. 라는.
참된 지혜를 얻을 수 있었던 2주(혹은 3주??) 랄까 -_-;;;
개운해라-ㅂ-;;

아 그러니까,
이게 무슨 소리냐고
아.. 그르니깐…
몇주간 고생했던 문제를 개운하게 풀었다는.
그런거라는-ㅅ-;;;;