programing

.NET의 디버그 대 릴리스

itmemos 2023. 7. 6. 21:51
반응형

.NET의 디버그 대 릴리스

이전 질문에 이어 C# 응용 프로그램, 특히 웹 응용 프로그램에서 디버그 모드와 릴리스 모드 간에 사용 가능한 모든 차이점을 나열한 포괄적인 문서가 있습니까?

어떤 차이가 있습니까?

"디버그" 및 "릴리스"는 Visual Studio에서 정의한 미리 정의된 프로젝트 구성의 이름일 뿐입니다.
차이점을 보려면 Visual Studio의 Project Properties에서 Build 탭을 확인하십시오.

VS2005의 차이점은 다음과 같습니다.

  • 디버그 구성에 정의된 디버그 상수

  • 릴리스 구성에서 활성화된 코드 최적화

기타 차이점은 "고급" 단추를 클릭하여 확인할 수 있습니다.

하지만 할 수 있는 것은:

  • 프로젝트 속성 / 빌드에서 디버그 및 릴리스 구성에 대한 빌드 설정 변경

  • 솔루션 탐색기에서 솔루션을 마우스 오른쪽 버튼으로 클릭하고 구성 관리자를 선택하여 사용자 정의 구성 생성

DEBUG 상수의 동작은 상당히 명확하다고 생각합니다(#if 사전 처리자 지침 또는 조건부 속성에서 참조할 수 있습니다).그러나 정확히 어떤 최적화 기능이 활성화되었는지에 대한 포괄적인 문서는 알지 못합니다. 사실 Microsoft는 사전 통보 없이 최적화 기능을 무료로 향상시키고 싶어할 것입니다.

하나의 간결한 문서는 모르지만, 다음과 같습니다.

  • Debug.쓰기 호출은 릴리스에서 제거됩니다.
  • 릴리스에서는 Scott Hanselman이 설명한 대로 최적화로 인해 CallStack이 약간 "이상하게 보일 수 있습니다.

차이점을 나열하는 문서가 하나도 없습니다.디버그 모드에서 컴파일하면 이미 나열된 몇 가지 차이점 외에도 런타임에 수행되는 대부분의 JIT 컴파일러 최적화가 해제되고 더 완전한 디버그 정보가 기호 데이터베이스 파일(.pdb)로 전송됩니다.

또 다른 큰 차이점은 JIT 컴파일러가 GC에 호출을 삽입한다는 점에서 GC 동작이 다소 다르다는 것입니다.디버깅 세션을 지원하려면 필요에 따라 KeepAlive()를 선택합니다.

디버그 및 릴리스는 서로 다른 솔루션 구성에 대한 레이블일 뿐입니다.원하는 경우 다른 항목을 추가할 수 있습니다.구성 관리자에서 구성을 추가하려면 다음과 같이 하십시오.

http://msdn.microsoft.com/en-us/library/kwybya3w.aspx

주요 차이점 -

  1. 디버그 DLL에는 Visual Studio의 모든 소스 코드 줄에 중단점을 설정할 수 있도록 몇 가지 지침이 추가됩니다.또한 코드를 디버깅할 수 있도록 코드가 최적화되지 않습니다.릴리스 버전에서는 이러한 추가 지침이 제거되었습니다.

  2. PDB 파일은 디버그 모드에서만 생성되고 릴리스 모드에서는 생성되지 않습니다.

  3. 릴리스 모드에서 코드는 JIT 컴파일러에 내장된 옵티마이저에 의해 최적화됩니다.다음과 같은 최적화를 수행합니다.

    메소드 인라이닝 - 메소드 호출은 메소드 코드를 주입하는 것으로 대체됩니다.

    CPU 레지스터 할당 - 로컬 변수 및 메서드 인수는 스택 프레임에 다시 저장되지 않고 CPU 레지스터에 저장된 상태를 유지할 수 있습니다.

    배열 인덱스 검사 제거 - 배열 작업 시 중요한 최적화 기능입니다(모든 .NET 컬렉션 클래스는 내부적으로 배열을 사용함).JIT 컴파일러가 루프가 배열을 절대로 경계 밖으로 인덱싱하지 않는지 확인할 수 있으면 인덱스 검사가 제거됩니다.

    루프 언롤링 - 루프 바디에서 코드를 반복하면 작은 바디의 짧은 루프(최대 4개)가 제거됩니다.

    비활성 코드 제거 - (false) { /.../ }이(가) 완전히 제거된 경우와 같은 문장입니다.

    코드 호이스트 - 루프의 영향을 받지 않는 루프 내부의 코드는 루프 밖으로 이동할 수 있습니다.

    공통 하위 표현식 제거.x = y + 4, z = y + 4, z = x가 됨

ASP.NET Ajax 컨트롤을 사용하는 경우 한 가지 주요 성능 영역: 릴리스에서 실행할 때 JavaScript 라이브러리에서 디버그 정보가 제거되며 복잡한 페이지에서 성능이 크게 향상되었습니다.다른 웹 기반 리소스는 이 설정에 따라 캐시되거나 캐시되지 않을 수 있습니다.

웹 또한웹릴프디의버그/는다다결스의니정됩해명음령에리에 의해 된다는 것을 기억하세요.web.configVisual Studio 내의 설정이 아닌 파일입니다.

<system.web>
    <compilation debug="true">

추가 정보:

또한 프리프로세서 마크업을 사용하여 디버그 또는 릴리스에서만 실행할 코드의 일부를 관리할 수 있습니다.

 #if DEBUG
    // Some code running only in debug
 #endif

또는

 #if NOT DEBUG
    // Some code running only in release
 #endif

Debug 모드에서는 GDI+로 그리기가 상당히 느립니다.

릴리스 버전:

  1. 속도가 상당히 빠르며(가장 중요한 것은) 최적화됨

  2. 디버깅할 수 없음(단계별)

  3. 그리고 "codice_1" 지침으로 작성된 코드는 포함되지 않습니다.

디버그와 릴리스 빌드의 차이점은 무엇입니까?를 참조하십시오.

실행 파일을 다른 기계에 배포할 때 시스템이 MSVCP110D.dll을 누락했다는 오류 메시지가 표시되었습니다.

이 문제에 대한 해결 방법은 스택 오버플로 문제에 나와 있습니다. Visual Studio MSVCP110D.dll이 없습니다.

XXXXD에서.dll D는 DLL 파일이 DLL 파일의 디버그 버전임을 의미합니다.그러나 MS Visual C++ 재배포 가능 패키지에는 DLL 파일의 릴리스 버전만 포함되어 있습니다.

즉, Visual C++에서 개발한 프로그램을 배포해야 하는 경우 릴리스 모드에서 빌드해야 합니다.또한 대상 시스템에 MS Visual C++ 재배포 가능(올바른 버전)을 설치해야 합니다.

디버그 모드와 릴리스 모드의 중요한 차이점 중 하나라고 생각합니다.

언급URL : https://stackoverflow.com/questions/90871/debug-vs-release-in-net

반응형