본문 바로가기

컴퓨터/디버깅2

(3)
유니코드로 작업시 ? 는 정말로 ? 인가? unicode 로 작업을 하거나 unicode 로 되어 있는 자료를 다루는 작업을 할 경우 상황에 따라 글자가 깨져서 ? 로 표시되는 경우가 많다, 아주 많다, >..
유니코드 사용시 터미널로 출력되지 않는 문자에 의한 오류 파일에 무효한 ID를 텍스트로 저장한 후 읽어 들여서 set 에 넣고, 데이터 처리를 할 때 그 집합에 있으면 넘어가도록 코드를 작성했다. 그런데 최종적으로 보니 그 중 한 개의 무효한 ID가 처리가 되고 있었다. 제일 먼저 생각한 것은 그 ID 가 무효한 ID를 저장하는 파일에 없을 것이라는 것이었으나 확인을 해보니 분명 있었다. 그럼 어떤 이유에서든지 std::set 에 안 들어가나, 해서 set 의 모든 요소를 출력해 보았는데 역시나 있었다. 있는데 왜 처리를 하지? 현재 주어진 ID 가 set 에 있는지를 확인하기 위하여 std::set::count 함수를 사용했기 때문에 그대로 하면서 출력을 해 보았는데 없는 것으로 나온다. 그럼 아예 그 요소를 set 에 집어 넣기 전/후 집합 크기가 변하는지..
코드의 논리적 오류로 인한 버그를 잡는 방법에 관하여 디버깅2 항목은 앞으로 코드의 논리적 오류로 인한 버그를 잡는 방법에 관하여 작성할 계획이다. 원래 있던 디버깅 항목은 문법 오류로 인한 컴파일 오류, 코드 자체의 문제로 인하여 메모리가 죽거나 API 의 구조를 잘 모르거나 해서 생기는 문제들을 집중적으로 다룬 반면, 디버깅2 항목은 코드 속에 숨어 있는 논리적 오류로 문제가 발생한 것을 다룬다. 다시 말해, 컴파일 오류도 없고 중간에 프로그램이 멈추지도 않는 등 결과가 만들어지기는 하지만 원하는 결과가 아닐 경우, 바로 이런 경우 어떻게 문제를 찾는가를 살펴 볼 생각이다. TDD가 IDE에 통합이 되는 등 이미 많은 기법들이 나와 있을 것이다. 따라서, 이 곳의 글들은 얄팍할 수밖에 없지만, 특정 경우 각각에 대하여 어떻게 하는지에 대한 구체적인 사례..