본문 바로가기
Programming Tech/IDE

[Visual Studio] 중단점이 현재 적중되지 않습니다, 중단점이 동작하지 않을 때 해결 방법

by 희품 2018. 12. 20.
반응형

 

비주얼 스튜디오를 쓰면서 디버깅을 하다 보면, 잘 되다가 뜬금없이 디버깅이 안 될 때가 있어요.
해결 방법으로 여러 가지를 시도할 수 있는데, 일단, 왜 그럴까요?
문구는 버전에 따라, 그리고 사유에 따라 다릅니다.
- 중단점이 현재 적중되지 않습니다. 이 문서의 기호가 로드되지 않았습니다.

 

[원인]
1. 이미 실행 중인 프로세스 디버깅 수행할 때 디버깅할 Process가 Load 되지 않음
- 이미 실행 중인 프로세스에 Attach 하여 디버깅할 때 가끔 당황할 수 있는 부분입니다. Debug 할 프로세스가 맞는지 다시 확인하거나 추가 Process Attach 해서 Load 할 수 있습니다.
일반적으로, 빌드 - 구성관리자에서 Release로 빌드했을 때 증상이 발생할 수 있습니다.
 
 
특정 환경에서는 Release로만 디버깅을 해야 할 때가 있는데, Release로 했을 때 디버깅이 잘 안 되는 이유는 최적화에 많은 영향이 있어요.
프로젝트 - 속성 - 구성 속성 - C/C++ - 최적화 옵션에서 사용 안 함으로 되어있어야 디버깅이 잘 동작하는데요, 최적화의 원리가 불필요한 코드를 건너뛰거나(속도), 불필요한 소스코드를 간소화(용량)해서 빌드해주는 역할을 해주기 때문이죠.
 
예를 들면, 변수 선언과 초기화만 하고 아무 동작 안 하는 반복문은 바로 건너뛸 수도 있어요(그래서 반복문으로 시간을 Count하기 위해 반복문에 별다른 처리 없이 Sleep만 넣었을 때, Debug로 테스트할 때는 잘 되었지만, Release로 배포 후 비정상적으로 동작하는 때도 많이 있습니다)
 
 
- 소스 파일이 모듈을 빌드했을 때와 다릅니다. 그래도 디버거에서 해당 소스 파일을 사용하시겠습니까?
- 중단점이 현재 적중되지 않습니다. 소스 코드가 원래 버전과 다릅니다.
 
[원인]
Debug 정보가 손상되거나 일치하지 않음
- 디버깅 중 코드가 수정되면, 일시적으로 중단 점이 동작하지 않을 수 있습니다. 이때는 다시 빌드해서 실행하시면 정상 동작하죠. 아니면, 디버깅 중에도 편집하여 계속하기 옵션이 켜져 있으면, 수정 전 코드와 같이 소스코드를 맞추고 저장하면, 다시 동작하기도 합니다.
 
대부분은 Visual Studio에서 소스코드와 Debug 정보 파일이 맞지 않아 발생하는 문제인데요, 빌드된 정보와 실제 Code의 인코딩 정보가 달라지면, 다른 파일로 인식을 하므로 인코딩 문제로도 많이 발생하기도 합니다.
중단점 설정 정보 자체가 갱신이 안 되는 원인도 있어서, 다양한 방법을 소개해드리겠습니다.
 
 
1. Clean 빌드
- 다시 빌드 또는 정리, 그리고 빌드 하는 방법입니다. 다시 빌드할 경우, 종속성으로 묶여있는 라이브러리도 점검하기 때문에 수정되었는데도 Build 하지 않고 넘어가서 발생하는 문제도 해결될 수 있습니다.
 
2.소스코드 재작성
중단점이 동작하지 않는 해당 파일의 소스코드를 복사하고, 원본 파일은 삭제합니다. 그리고, 새로운 파일을 만들어 빈 파일 그대로 솔루션에 추가하고, 이름을 바꾼 다음에, 복사한 파일의 내용을 새로운 파일에 붙여넣습니다.
(쉽게 말해 파일 자체를 교체하고 내용을 가져다 오는 겁니다)
 
3. 인코딩 변경
파일 - 고급 저장 옵션으로 인코딩을 바꿔보는 방법입니다. 
기본적으로 한국어 - 코드 페이지 949로 되어있는 걸 유니코드 서명 있는 UTF-8로 저장해보세요.
(주의 : SVN 등 형상 관리 시스템을 사용했을 때, 인코딩을 변경하면 완전히 다른 파일로 인식되기 때문에 이력 관리에 한 차례 어려움이 생길 수 있습니다.)

 

 

 
4. ENTER Code 삽입 후 빌드
놀랍게도 엔터를 몇 번 쳐주고 다시 빌드하면 다시 되기도 합니다.
컴파일러가 어떤 코드 문자를 해석할 때(줄 바꿈이나, 띄어쓰기, 특정한 특수문자 등), 문자를 다시 코드(아스키코드나 유니코드 등)로 바꿔서 해석하는데, 이 과정에서 잘못 인식하는 부분이 있지 않을까 생각이 드네요.
 
중단점이 적중되지 않은 소스 파일의 끝에 엔터를 몇 줄 쳐주고 다시 빌드해보세요.
 
5. suo 파일 삭제
suo 파일은 파일 목록과 중단점, 조사식 창의 내용 등을 포함하고 있는 파일로, 없으면 다시 초기화 돼서 생성됩니다. 중단점 정보가 들어있어서, 이 파일을 지우면 이전에 등록한 중단점 정보는 날아갈 수 있는 점 유의해주세요.
 
6. 옵션 설정
최후의 방안으로 일치하지 않아도, 디버깅을 할 수 있게 해주는 옵션입니다. 디버깅 중 소스코드를 수정했을 때도, Line은 맞지 않지만 유용하게 값을 빠르게 확인 할 수 있게 도와주기도 하는 옵션입니다.
 
옵션 여부를 생각 못 하고 있다가 잘못 인지하였을 때는 허무하게 시간을 날릴 수도 있는 양날의 검과 같은 옵션이죠. 문구는 버전마다 다르지만, 
도구 - 옵션 - 디버깅 - 일반 - 소스 파일이 원래 버전과 정확하게 일치해야 함. 또는 아래 사진처럼 유사한 문구의 옵션을 해제해주면, 디버깅이 정상 실행 될 거예요.

본문 앞에 C 스타일 Title 사진을 써봤는데, 임시로 쓰기에는 나쁘지 않은 것 같네요. 사진에는 두꺼운 액자를 써봤는데, 조금 부담스럽네요.

디버깅하다가 멘붕오신분들, 다 무사히 해결되셨으면 좋겠습니다.

 

반응형