PDB 파일이란 무엇입니까?


252

PDB 파일이란 무엇이며 솔루션을 다시 빌드 할 때 릴리스 폴더에서 PDB 파일을 어떻게 제외시킬 수 있습니까?


17
pdb는 프로그램 데이터베이스 파일이며 컴파일시 작성됩니다. 이 파일에는 프로그램의 디버그 구성을 증분 링크 할 수있는 디버깅 및 프로젝트 상태 정보가 들어 있습니다.
pavanred

@pavanred C # 컴파일러도 증분 링크를 수행합니까? 나는 C ++ 세계에서만 그것에 대해 들었습니다. C ++ 프로젝트에서는 프로젝트 속성에서 증분 링크를 활성화 / 비활성화합니다. C # 프로젝트에도 옵션이 있습니까?
RBT

답변:


236

PDB 파일에는 디버거가 작업 할 정보가 들어 있습니다. 릴리스 빌드에는 디버그 빌드보다 정보가 적습니다. 그러나 전혀 생성하지 않으려면 프로젝트의 빌드 속성으로 이동하여 릴리스 구성을 선택하고 "고급 ..."을 클릭 한 다음 "디버그 정보"에서 "없음"을 선택하십시오.


2
@Jon 응용 프로그램 사용 중 충돌이 발생하면 사용자에게 추가 정보를 제공하는 데 도움이됩니까? (즉, "이 프로그램을 종료하고 Windows 오류 보고서를 보내야합니다"대신 JIT 창에 도움이
됩니까

19
예외는 코드의 특정 행으로 추적 될 수 있으므로 디버그 릴리스에 포함해야합니다. pdb 파일에 기호가 없으면 문제를 해결하기 위해 특정 문제를 정확히 찾아 내기가 어렵습니다. 때로는 큰 보고서의 추가 정보가 매우 유용 할 수 있으므로 릴리스 빌드에서 반드시 제외 할 필요는 없습니다.
Darbio

4
@Jared : 그렇습니다. 예외의 스택 트레이스가 포함되어 있는데, 이는 특정 기능과 코드 라인을 정확하게 나타냅니다.
Darbio

1
@Jared : "JIT 창"은 무엇을 의미합니까? 사용자에게 더 많은 정보를 제공하지는 않지만 필요한 경우 릴리스 빌드에 디버거를 연결할 수 있습니다. 일반적으로 최종 사용자 응용 프로그램에는 포함시키지 않습니다. 물론, 릴리즈 폴더로 복사되었다고해서 설치 프로그램으로 배송해야한다는 의미는 아닙니다.
Jon Skeet

3
@Ata : PDF가 아닌 PDB. 두 가지를 분리하십시오- 목적에 따라 완전히 다른 파일 형식입니다. PDB를 포함시키는 것은 특별히 문제를 일으키지 않을 것입니다. 그것은 해커의 작업을 조금 더 쉽게,하지만 당신에 대한 특정 문제인가? 일반적으로 .NET은 대부분의 경우 비교적 쉽게 디 컴파일 될 수 있습니다. 걱정이되는 경우 PDB를 제공하지 않는 것이 좋은 해결책이 아닙니다.
Jon Skeet

130

원래 " 고객 컴퓨터에 PDB 파일을 배포해야합니까? "라는 질문을 받았습니다 . " 게시물을 읽은 후 파일을 제외하기로 결정했습니다.

오늘까지는 Exception.StackTrace예외를 해결하는 데 필요한 파일 및 줄 번호 정보가없는 메시지 상자에 왜 누락 되었는지 알아 내려고 시도 할 때까지 모든 것이 제대로 작동했습니다 . 이 게시물을 다시 읽고 중요한 정보를 발견했습니다 .PDB는 앱을 실행하는 데 필요하지 않지만 파일과 줄 번호가 StackTrace문자열 에 있어야 합니다. PDB 파일을 실행 가능 폴더에 포함 시켰으며 이제는 모두 정상입니다.


2
이것은 accepted answer여기서 언급하지 않은 것을 명심해야 할 매우 중요한 부분 입니다.
Monku

85

PDBP rogram D ata B ase 의 약자입니다 . 이름에서 알 수 있듯이 프로그램을 디버그 모드로 실행하는 데 필요한 정보를 유지 관리하는 저장소 (데이터베이스와 같은 영구 저장소)입니다. 여기에는 코드를 디버깅하는 동안 (Visual Studio에서) 디버거가 Visual Studio에서 중단 될 것으로 예상되는 지점을 삽입 한 지점과 같은 중요한 관련 정보가 많이 포함되어 있습니다.

*.pdb디버그 폴더에서 파일 을 제거하면 Visual Studio가 중단 점에 여러 번 실패하는 이유 입니다. Visual Studio 디버거는 파일을 사용하여 스택 추적에서 예외가 발생한 정확한 줄 번호의 코드 파일을 알려줄 수도 *.pdb있습니다. 따라서 효과적으로 pdb 파일은 프로그램을 디버깅하는 동안 개발자에게 큰 도움이됩니다.

일반적으로 *.pdb파일 생성을 제외하지 않는 것이 좋습니다 . 프로덕션 릴리스 관점에서해야 할 일은 pdb 파일을 작성하지만 제품 설치 프로그램의 고객 사이트에는 제공하지 않는 것입니다. 생성 된 모든 PDB 파일을 필요한 경우 나중에 사용 / 참조 할 수있는 기호 서버에 보존하십시오. 특히 프로세스 충돌과 같은 문제를 디버깅하는 경우에 적합합니다. 크래시 덤프 파일 분석을 시작하고 *.pdb빌드 프로세스 중에 만들어진 원본 파일이 유지되지 않으면 Visual Studio에서 크래시를 일으키는 정확한 코드 줄을 만들 수 없습니다 .

여전히 *.pdb모든 릴리스 에서 파일 생성을 비활성화 하려면 프로젝트 속성-> 빌드 탭-> Advanced버튼 클릭-> none"디버그 정보"드롭 다운 상자에서 선택-> OK아래 스냅 샷과 같이 누르 십시오. .

C # 프로젝트에 대한 디버그 정보 설정

참고 :이 설정은 "디버그"및 "릴리스"빌드 구성에 대해 별도로 수행해야합니다.


13

PDB 파일은 디버거에 의해 사용되는 정보가 포함되어 있습니다. 응용 프로그램을 실행할 필요가 없으며 릴리스 된 버전에 포함시킬 필요가 없습니다.

Visual Studio에서 pdb 파일이 생성되지 않도록 설정할 수 있습니다. 명령 행 또는 스크립트에서 빌드하는 경우 /Debug스위치 를 생략하십시오 .


2
릴리스 모드는 여전히 기본적으로 PDB를 빌드합니다. 그래도 프로젝트 속성을 변경하여 비활성화 할 수 있습니다.
Jon Skeet

예; 여전히 기본 프로젝트와 함께 출시됩니다.
Andrew Barber

방금 확인했으며 Visual Studio를 사용하는 경우 기본적으로 하나를 얻습니다.
Mark Byers

4

프로그램 디버그 데이터베이스 파일 (pdb)은 디버깅 정보를 저장하기위한 Microsoft의 파일 형식입니다.

Visual Studio 또는 명령 프롬프트를 사용하여 프로젝트를 빌드하면 컴파일러에서 이러한 심볼 파일을 만듭니다.

Microsoft 문서 확인

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.