.NET에서 가능한 중복
디버그 Visual Studio 릴리스
Visual Studio에서 디버그와 릴리스의 차이점은 무엇입니까?
답변
가장 중요한 것은 디버그 모드에서는 최적화가없고 릴리스 모드에서는 최적화가 있다는 것입니다. 이것은 컴파일러가 매우 고급이고 코드를 매우 까다로운 저수준으로 개선 할 수 있기 때문에 중요합니다. 결과적으로 코드의 일부 행이 지침없이 남거나 일부가 모두 뒤섞 일 수 있습니다. 단계별 디버깅은 불가능합니다. 또한 지역 변수는 종종 신비한 방식으로 최적화되기 때문에 변수가 “최적화”되어 있기 때문에 Watches 및 QuickWatch가 작동하지 않는 경우가 많습니다. 그리고 다른 최적화도 많이 있습니다. 언젠가 최적화 된 .NET 코드를 디버깅 해보십시오.
또 다른 주요 차이점은 이로 인해 기본 릴리스 설정이 광범위한 디버그 기호 정보를 생성하는 데 신경 쓰지 않는다는 것입니다. 이 파일은 .PDB 파일이며 디버거가 어떤 어셈블리 명령이 어떤 코드 줄에 해당하는지 파악할 수 있도록합니다.
답변
“Debug”와 “Release”는 실제로 빌드 및 디버깅에 영향을 줄 수있는 전체 설정에 대한 두 개의 레이블입니다.
“디버그”모드에서는 일반적으로 다음이 있습니다.
- 프로그램 디버그 데이터베이스 파일-런타임 동안 소스에서 프로그램 실행을 매우 밀접하게 추적 할 수 있습니다.
- 모든 최적화가 꺼져있어 변수 값을 검사하고 그렇지 않으면 최적화되었거나 인라인되었을 수있는 함수를 추적 할 수 있습니다.
- 릴리스와 비교하여 디버그 모드에서 다르게 작동하는 코드를 작성할 수있는 _DEBUG 전 처리기 정의 (예 : 디버깅 중에 만 사용해야하는 ASSERT를 계측하는 경우)
- 일반적으로 실제 고객에게 배포되지 않는 디버깅 옵션을 사용하여 컴파일 된 라이브러리에 연결 (크기 및 보안상의 이유로)
“Release”모드에서는 최적화가 켜져 있고 (사용 가능한 여러 옵션이 있지만) _DEBUG 전 처리기 정의가 정의되어 있지 않습니다. 일반적으로 PDB 파일을 생성하고 싶을 것입니다. 작업이 더 빨리 실행될 때 릴리스 모드에서 “디버그”할 수있는 것이 매우 유용하기 때문입니다.
답변
대부분 디버그에는 디버깅 할 때 유용한 추가 정보가 많이 포함되어 있습니다. 릴리스 모드에서는이 모든 것이 성능을 위해 잘리고 교환됩니다.
답변
프로젝트 컴파일 옵션을 살펴보고 비교하면 차이점이 무엇인지 알 수 있습니다.
질문이 네이티브 / C ++ 코드에 관한 것이라고 가정합니다 (구문에서 완전히 명확하지 않음).
기본적으로 디버그에서 모든 코드 생성 최적화가 꺼져 있습니다. 일부 라이브러리 (예 : STL )는 기본적으로 더 엄격한 오류 검사 (예 : 디버그 반복기)를 사용합니다. 더 많은 디버깅 정보가 생성됩니다 (예 : “편집 및 계속”). 오류를 포착하기 위해 코드에서 더 많은 것들이 생성됩니다 (로컬 변수 값은 초기화되지 않은 패턴으로 설정되고 디버그 힙이 사용됨).
답변
또한 디버그 모드는 디버깅에 도움이되는 많은 추가 스레드를 생성합니다. 디버거 연결 여부에 관계없이 프로세스 수명 동안 활성 상태로 유지됩니다. 여기 내 관련 질문을 참조 하십시오 .
답변
빌드 플래그는 로깅 및 “콘솔”메시징을 변경하는 데만 사용해야 하는 다른 로직을 허용 하지만 남용 될 수 있으며 하위 수준뿐 아니라 실제 비즈니스 로직도 크게 변경 될 수 있다는 점은 매우 분명한 사실을 언급 할 가치 가 있습니다 .
답변
또한 예를 들어 MFC 를 사용할 때 디버그 프로젝트는 재배포 불가능한 DLL 버전 MFC90D.DLL
에 대해 링크하는 반면 릴리스 빌드는 다음과 같은 재배포 가능 버전에 대해 링크합니다.MFC90.DLL
. 이것은 아마도 다른 프레임 워크와 유사합니다.
따라서 개발되지 않은 컴퓨터에서는 디버그 빌드 응용 프로그램을 실행할 수 없습니다.