programing

.pdb 파일을 생성하는 릴리스입니다. 이유는 무엇입니까?

stoneblock 2023. 5. 29. 09:16

.pdb 파일을 생성하는 릴리스입니다. 이유는 무엇입니까?

가 Visual Studio 2005를 입니까?.pdb릴리스에서 컴파일할 때 파일?릴리스 빌드를 디버깅하지 않을 텐데, 왜 생성됩니까?

PDB 파일이 없으면 "Release" 빌드를 주소 수준 디버깅 이외의 다른 방법으로 디버깅하는 것이 불가능하기 때문입니다.최적화는 실제로 코드에 많은 영향을 미치므로 무언가 잘못되면(예: 예외가 발생할 경우) 범인을 찾기가 매우 어렵습니다.소스 코드의 라인이 생성된 어셈블리 코드와 일대일로(또는 같은 순서로) 일치할 수 없기 때문에 중단점을 설정하는 것조차 매우 어렵습니다.PDB 파일은 사용자와 디버거를 지원하여 사후 디버깅을 훨씬 쉽게 합니다.

소프트웨어를 릴리스할 준비가 되었으면 그때까지 모든 디버깅을 완료해야 한다는 점을 강조합니다.이는 확실히 사실이지만 다음과 같은 몇 가지 중요한 사항을 염두에 두어야 합니다.

  1. 또한 "Release" 빌드를 사용하여 응용 프로그램을 릴리스하기 전에 테스트하고 디버그해야 합니다.최적화 기능을 설정하면("디버그" 구성에서는 기본적으로 사용할 수 없음) 때때로 사용자가 감지할 수 없는 미묘한 버그가 나타날 수 있기 때문입니다.이 디버깅을 수행할 때 PDB 기호가 필요합니다.

  2. 고객은 "이상적인" 조건에서만 나타나는 에지 사례와 버그를 자주 보고합니다.이런 것들은 실험실에서 복제하는 것이 거의 불가능합니다. 왜냐하면 그들은 그 사용자의 기계의 어떤 엉터리 구성에 의존하기 때문입니다.특히 도움이 되는 고객인 경우에는 발생한 예외를 보고하고 스택 추적을 제공합니다.또는 원격으로 소프트웨어를 디버그하기 위해 자신의 컴퓨터를 빌릴 수도 있습니다.두 경우 모두 PDB 파일이 도움이 되기를 원할 것입니다.

  3. 프로파일링은 항상 최적화가 활성화된 "릴리스" 빌드에서 수행해야 합니다.PDB 파일은 프로파일링 중인 어셈블리 명령을 실제로 작성한 소스 코드에 매핑할 수 있기 때문에 유용합니다.

컴파일 *후에는 PDB 파일을 다시 생성할 수 없습니다.빌드하는 동안 생성하지 않으면 기회를 잃게 됩니다.그것들을 만들어 내는 것은 아무 해가 되지 않습니다.배포하지 않으려는 경우 바이너리에서 제외하면 됩니다.하지만 나중에 그것들을 원하기로 결정한다면, 당신은 운이 없을 것입니다.필요할 때를 대비하여 항상 생성하고 복사본을 보관하는 것이 좋습니다.

정말로 전원을 끄고 싶다면 언제든지 선택할 수 있습니다.프로젝트의 속성 창에서 변경할 구성에 대해 "디버그 정보" 옵션을 "없음"으로 설정합니다.

그러나 "디버그" 및 "릴리스" 구성은 기본적으로 디버그 정보를 내보내는 데 서로 다른 설정을 사용합니다.이 설정을 유지할 수 있습니다.디버그 빌드의 경우 "디버그 정보" 옵션이 "전체"로 설정됩니다. 즉, PDB 파일 외에도 디버깅 기호 정보가 어셈블리에 포함됩니다.편집 및 계속과 같은 멋진 기능을 지원하는 기호도 얻을 수 있습니다.릴리스 모드에서는 "pdb-only" 옵션이 선택되며, 이 옵션에는 어셈블리의 내용에 영향을 주지 않고 PDB 파일만 포함됩니다.따라서 PDB 파일의 존재 여부만큼 간단하지 않습니다./bin디렉토리입니다.그러나 "pdb-only" 옵션을 사용한다고 가정하면 PDB 파일의 존재는 코드의 런타임 성능에 영향을 미치지 않습니다.

* Marc Sherman이 코멘트에서 지적했듯이 소스 코드가 변경되지 않았거나 버전 제어 시스템에서 원래 코드를 검색할 수 있는 한 이 코드를 재구성하여 일치하는 PDB 파일을 생성할 수 있습니다.적어도, 보통은.이것은 대부분 잘 작동하지만 컴파일러가 동일한 코드를 컴파일할 때마다 동일한 이진 파일을 생성하지는 않으므로 미묘한 차이가 있을 수 있습니다.또한 Visual Studio용 서비스 팩을 적용하는 것과 같이 툴 체인을 업그레이드한 경우 PDB가 일치할 가능성이 더욱 낮아집니다.신뢰할 수 있는 사후 PDB 파일 생성을 보장하려면 소스 코드를 버전 제어 시스템에 보관할 뿐만 아니라 전체 빌드 도구 체인에 대한 바이너리를 보관하여 빌드 환경의 구성을 정확하게 다시 만들 수 있어야 합니다.PDB 파일을 쉽게 만들고 보관할 수 있다는 것은 두말할 나위도 없습니다.

는 다에대 PDB 수있다니에 될 수 있습니다.Release뿐만 아니라Debug이 설정은 다음과 같습니다(VS2010에서는 이와 유사하지만 VS2005에서는 이와 유사해야 함).

프로젝트 → 속성 → 빌드 → 고급 → 디버그 정보

그냥 변경합니다.None.

릴리스 빌드를 디버그하지 않을 것이라고 확신하는 이유는 무엇입니까?경우에 따라 고객으로부터 어떤 이유(타이밍이 다르거나 동작이 약간 다르거나)로 인해 디버그 버전에서 재현할 수 없는 결함 보고서를 받을 수 있습니다.해당 문제가 릴리스 빌드에서 재현 가능한 것으로 나타나면 일치하는 pdb를 얻게 되어 기쁘게 생각합니다.

.pdb 파일 없이는 생산 코드를 처리하는 것이 사실상 불가능합니다. 비용과 시간이 많이 소요될 수 있는 다른 도구에 의존해야 합니다.예를 들어 추적이나 windbg를 사용할 수 있다는 것은 이해하지만, 그것은 당신이 무엇을 성취하기를 원하는지에 달려 있습니다.특정 시나리오에서는 프로덕션 데이터를 사용하여 원격 코드(오류 또는 예외 없음)를 단계적으로 수행하여 특정 동작을 관찰하고자 할 때 여기서 .pdb 파일이 유용합니다.그들이 없으면 그 코드에서 디버거를 실행하는 것은 불가능합니다.

또한 크래시 덤프를 사용하여 소프트웨어를 디버그할 수 있습니다.고객이 전송한 후 이를 사용하여 소스의 정확한 버전을 식별할 수 있습니다. 그러면 Visual Studio는 크래시 덤프를 사용하여 올바른 디버깅 기호 집합(및 올바르게 설정된 경우 소스)을 가져올 수도 있습니다.기호 저장소에 대한 Microsoft 설명서를 참조하십시오.

.PDB 파일은 "Program Database"의 단축 이름입니다.여기에는 디버거의 디버그 지점과 사용되거나 참조되는 리소스에 대한 정보가 포함되어 있습니다.디버깅 모드로 빌드할 때 생성됩니다.응용 프로그램이 런타임에 디버그할 수 있습니다.

디버그 모드의 .PDB 파일 크기입니다.응용 프로그램을 테스트할 때 사용됩니다.

pdb 파일의 좋은 기사.

http://www.codeproject.com/Articles/37456/How-To-Inspect-the-Content-of-a-Program-Database-P

다중 프로젝트 솔루션에서는 일반적으로 PDB 또는 XML 파일을 생성하지 않는 하나의 구성을 사용합니다.변경하는 대신Debug Info하기 위한 모든 프로젝트의 속성none특정 구성에서만 작동하는 빌드 후 이벤트를 추가하는 것이 더 편하다고 생각했습니다.

안타깝게도 Visual Studio에서는 다른 구성에 대해 다른 빌드 후 이벤트를 지정할 수 없습니다.그래서 저는 이것을 수동으로 편집하기로 결정했습니다.csproj을 추가합니다. (의 모든 ▁of▁any▁file(다제▁theinstead외▁and▁existing니시파▁of▁()).PostBuildEvent표시됨):

  <PropertyGroup Condition="'$(Configuration)' == 'Publish'">
    <PostBuildEvent>
        del *.pdb
        del *.xml
    </PostBuildEvent>
  </PropertyGroup>

안타깝게도 빌드 후 이벤트 텍스트 상자가 비어 있으므로 이 텍스트 상자에 내용을 입력하면 예측할 수 없는 결과가 발생할 수 있습니다.

디버그 기호(.pdb) XML 문서(.xml) 파일은 전체 크기의 상당 부분을 차지하며 일반 배포 패키지에 포함되지 않아야 합니다.하지만 필요할 때 접근할 수 있어야 합니다.

한 가지 가능한 방법은 TFS 빌드 프로세스가 끝나면 별도의 아티팩트로 이동하는 것입니다.

실제로 PDB 파일과 심볼 정보가 없으면 성공적인 충돌 보고서(메모리 덤프 파일)를 만드는 것이 불가능하며 Microsoft는 문제의 원인이 무엇인지 전체 그림을 가지고 있지 않습니다.

PDB를 사용하면 충돌 보고 기능이 향상됩니다.

언급URL : https://stackoverflow.com/questions/5457095/release-generating-pdb-files-why