최근에 당한 좌절 케이스들. 버전은 VS2008 SP1 였습니다.

1. 브레이크 포인트가 너무 많으면 동작하지 않는다.

정확한 갯수는 세어보지 않았지만, 브레이크 포인트가 일정 갯수를 넘어가면 모든 브레이크 포인트가 동작하지 않더군요. 내부적으로 뭔가 꼬이는 듯. 치료법은 정신 차릴 때까지 브레이크 포인트를 해제하는 것입니다. 제대로 실험해본 것은 아니지만, 하나 추가해서 동작하지 않는 상태에 빠지면 여러개를 지워야 정신을 차리는 것 같습니다.

브레이크 포인트를 수십개씩 찍어두는게 비정상이라면 할 말은 없지만, 버그 하나 추적해서 잡고 나면 브레이크 포인트 푸는 것을 잊을 때가 더 많으니까 브레이크 포인트가 점점 쌓이고, 그러다 보니 이런 경험도 해보게 되더군요. 그냥 브레이크 포인트 찍는 갯수에 제한을 걸어두던가 하지 MS...

2. 이름 충돌시 잘못된 바이너리 생성

LTCG를 켜놓으면 이름이 같은 클래스/구조체가 있을 때 빌드된 바이너리가 미쳐있는 경우가 있다는 것은 알고 있었지만, LTCG를 켜놓지 않았는데도 이런 경우가 발생을 하더군요. 왜 발생하는지는 컴파일러가 어떻게 동작하는지 다시 공부해봐야 이해할 수 있을 것 같습니다. 왜 .cpp에 선언한 클래스가 머나먼 곳까지 가서 바이너리를 오염시키는 건지... LTCG의 경우야 이해가 가지만요.

메모리 깨지는 문제로 매우 오랜 시간 동안 추적하다가 우연히 디버거창에서 보여주는 멤버변수가 전혀 엉뚱한 것을 보고 겨우 발견할 수 있었습니다. 그런데 왜 터지기 전까지는 코드가 멀쩡한 척하고 돌아간 것인지 그것도 납득 불가... -_-;

해결책은 당연히 이름을 바꾸거나 네임스페이스로 감싸는 것입니다.
top