2

죄송합니다.이 질문에 대한 답변이 이미 있었지만 관련이 없습니다. 디버거가 잘못 중단 점에 도달하면 Visual Studio 2013 C++ Win32 응용 프로그램에서 이상한 문제가 발생합니다. 다음은 샘플 코드입니다.잘못된 중단 점에 도달했습니다

#include "stdafx.h" 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    int a = 3; 
    int b = 1; 
    for (int i = 3; i >= 1; i--) 
     if (i % 2) 
      a = a*a; 
    b++; 
    return b; 
} 

나는 b++ 줄에 중단 점을 설정합니다. 나는 C# 코드를 디버깅 할 때 디버깅과 브레이크 포인트에 익숙하다. (그리고 C++의 초보자이기도하다.) 내 경험에 비추어 볼 때 b++의 중단 점은 for 루프가 종료 될 때만 히트해야한다. 그러나 각 루프 반복마다 발생하지만 코드 (증가)는 실행되지 않습니다. 다음은 관련 정보가 포함 된 VS의 스크린 샷입니다. enter image description here

+1

릴리스 구성을 실행하고 있습니까? 일부 라인이 최적화되어 있고 PDB의 라인 번호가 맞지 않을 수도 있습니다. 이러한 이유로 우리는 종종 _Noopt_ builds를 사용합니다.이 빌드는 기본적으로 Release와 같지만 최적화가 비활성화되어 있습니다 (물론 전체 디버그 구성을 사용하지 않으려는 경우). – PuerNoctis

+0

정리 빌드를 가지고 있는지 확인하고 정리하십시오. – AlexTheo

+0

1) 아니오, 디버그 모드로 실행 중입니다. 2) 현지인의 결과는 정확하지만이 시점에서 중단 점에 도달해서는 안됩니다. – Crypt32

답변

4

사실이 코드는 정상이며 예상대로 작동해야합니다. VS를 사용하면 실행 블록의 끝에 중단 점을 배치 할 수 있습니다 (이 경우 for 루프 내부의 if 문). (위 이미지에서와 같이) 중괄호로 if 문을 포장하지 않은 것처럼

enter image description here

은 VS 당신이 b++ 문에 배치 중단 따라서하여 for 실행 블록의 끝을 의미하고 있다고 가정 깨지므로 b++ 문을 실행하지 않아도됩니다.

+0

실행 블록 (루프, if 문 등)에 중괄호가 없으면 실행 블록 후 중단 점은 실제 블록이 아니라이 블록의 끝이라는 것을 올바르게 이해합니까? – Crypt32

+1

사실 둘 다 의미합니다. 즉, 프로그램이 명령문 블록의 끝이거나 루프를 완료하여이 명령문에 도달했기 때문에이 명령문에서 프로그램이 멈 춥니 다. –

+2

BTW, 엄밀히 말하면, 중괄호를 사용하지 않을 경우에도 항상 중괄호를 사용하는 것이 좋습니다. 이것은 가독성을 높이고'for' /'if' 명령문 아래에 다른 명령문을 추가하고 이들이 각각의 실행 블록의 일부가 될 것으로 예상하는 어리석은 오류를 방지합니다. –