2008-10-29 5 views
0

제목에서 정확하게 말합니다. 나는 MSVC++ 2008 익스프레스를 사용하고 있으며, 내 클래스 생성자는 릴리즈 모드에서 컴파일 될 때 절대로 실행되지 않습니다. 그것은 디버그 모드에서 작동합니다.클래스 생성자가 릴리스 모드에서 실행되지 않았습니다.

내가 좋아하는 뭔가를하고있는 중이 야 : DoIt(); 트리거에

ClassTest test; 
test.DoIt(); 

중단 점을, 그러나 ClassTest::ClassTest();에 중단하지 않습니다.

답변

5

중단 점이 적중되는 것을 방지하는 릴리스 모드의 컴파일러 최적화 일 수 있습니다. 이것은 생성자가 아무 것도하지 않으면 (즉, 아무 작업도하지 않는 경우) 발생할 수 있습니다. 생성자에 간단한 문을 몇 개 추가해보세요.

는 다음 단계에서 중단 점을 추가 (3) 위하고 있는지 (예를 들어 그것을 밖으로 인쇄)

  • 변수
  • 어떤 방법으로 그것을 사용하여 초기화를 로컬 변수를 선언 해당 중단 점에 도달했습니다.

    릴리즈 모드에서 중단 점이 발생하는 방식과 관련된 모든 종류의 이상한 디버깅 문제를 볼 수 있습니다.

  • +0

    이것은 맞지만 int를 선언하고 초기화 한 다음 사용하지 않으면 여전히 최적화되어 중단 점이 발생하지 않을 수 있습니다. 컴파일러가 최적화 할 수 없도록 외부 부작용이있는 명령문을 포함하고자합니다. –

    +0

    나는 바보 같았다. 생성자가 실행 중이다. 어떤 이유로 MAKEWORD를 사용하는 대신 wsa.wVersion을 WSAStartup의 첫 번째 매개 변수로 실수로 제공했습니다. 이는 디버그 모드에서 작동하는 것으로 보입니다. –

    +0

    감사합니다 매트 - 좋은 지적입니다. 변수를 초기화하는 것은 이론을 테스트하는 데 가장 먼저 떠오른 것이지만 실제로 변수를 사용하는 것도 매우 중요합니다. 나는 대답을 업데이트 할 것이다. – LeopardSkinPillBoxHat

    관련 문제