다음을 통해 공유


PDBCopy 사용

PDBCopy는 전체 기호 파일에서 제거된 기호 파일을 만드는 명령줄 도구입니다. 즉, 프라이빗 기호 데이터와 공용 기호 테이블을 모두 포함하는 기호 파일을 사용하고 공용 기호 테이블만 포함하는 해당 파일의 복사본을 만듭니다. 사용되는 PDBCopy 옵션에 따라 제거된 기호 파일에는 전체 공용 기호 테이블 또는 공용 기호 테이블의 지정된 하위 집합이 포함됩니다.

WDK에서 PDBCopy의 위치는 Windows용 디버깅 도구에 포함된 도구의설치 디렉터리를 참조하세요.

PDBCopy는 모든 PDB 형식 기호 파일(파일 이름 확장명 .pdb 포함)에서 작동하지만 이전 형식(.dbg) 기호 파일에서는 작동하지 않습니다.

공용 기호 테이블 및 프라이빗 기호 데이터에 대한 설명은 공용 및 프라이빗 기호를 참조하세요.

프라이빗 기호 제거

모든 공용 기호와 프라이빗 기호가 없는 제거된 기호 파일을 만들려면 원래 기호 파일의 경로와 이름, 새 기호 파일의 경로 및 이름, -p 옵션의 세 가지 매개 변수와 함께 PDBCopy를 사용합니다.

예를 들어 다음 명령은 mysymbols.pdb와 동일한 공용 기호 테이블을 포함하지만 프라이빗 기호 데이터는 포함하지 않는 publicsymbols.pdb라는 새 파일을 만듭니다.

pdbcopy mysymbols.pdb publicsymbols.pdb -p

mysymbols.pdb가 이미 제거된 기호 파일인 경우 새 파일과 이전 파일의 기호 콘텐츠가 동일합니다.

이 명령을 실행한 후 새 파일을 새 위치로 이동하고 이름을 기호 파일의 원래 이름(이 예제에서는 mysymbols.pdb)으로 바꿔야 합니다. 대부분의 디버깅 프로그램과 기호 추출 프로그램은 특정 파일 이름을 기반으로 기호를 찾기 때문입니다. 또는 다른 디렉터리가 지정된 경우 입력 파일과 PDBCopy 명령줄의 출력 파일에 동일한 파일 이름을 사용할 수 있습니다.

pdbcopy c:\dir1\mysymbols.pdb c:\dir2\mysymbols.pdb -p

참고 PDBCopy를 실행하기 전에 대상 파일이 없어야 합니다. 이 이름의 파일이 있는 경우 다양한 오류가 발생할 수 있습니다.

프라이빗 기호 및 선택한 공용 기호 제거

프라이빗 기호 데이터를 제거할 뿐만 아니라 공용 기호 테이블의 정보 양을 줄이려면 -f 옵션을 사용하여 제거할 공용 기호 목록을 지정할 수 있습니다.

다음 예제에서는 이 절차를 보여 줍니다.

  1. 제거하려는 기호의 전체 이름(장식 포함)을 결정합니다. 데코레이트된 기호 이름을 잘 모르는 경우 DBH 도구를 사용하여 이름을 확인할 수 있습니다. 자세한 내용은 특정 기호의 장식 확인 을 참조하세요. 이 예제에서는 제거하려는 기호의 데코레이트된 이름이 _myGlobal1_myGlobal2 가정해 보겠습니다.

  2. 제거할 기호 목록을 포함하는 텍스트 파일을 만듭니다. 이 파일의 각 줄에는 장식을 포함하여 하나의 기호 이름이 포함되어야 하지만 모듈 이름은 포함하지 않아야 합니다. 이 예제에서 파일에는 다음 두 줄이 포함됩니다.

    _myGlobal1
    _myGlobal2
    

    선택한 이름을 파일에 지정할 수 있습니다. 이 파일의 이름을 listfile.txt 디렉터리 C:\Temp에 배치한다고 가정해 보겠습니다.

  3. 다음 PDBCopy 명령줄을 사용합니다.

    pdbcopy OldPDB NewPDB -p -f:@TextFile
    

    여기서 OldPDBNewPDB 는 원래 기호 파일과 새 기호 파일이며 TextFile 은 2단계에서 만든 파일입니다. -f 옵션은 특정 공용 기호를 제거해야 하며 앰퍼샌드( @ )는 이러한 기호가 지정된 텍스트 파일에 나열됨을 나타냅니다.

    현재 예제에서 명령은 다음과 같습니다.

    pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -f:@c:\temp\listfile.txt
    

    그러면 새 기호 파일인 C:\dir3\mysymbols.pdb가 생성됩니다. 이 파일은 프라이빗 기호를 포함하지 않으며 listfile.txt 나열된 두 개의 전역 변수를 포함하지 않습니다.

이 예제와 같이 PDBCopy의 -f 옵션은 공용 기호의 특정 목록을 제거합니다. 앰퍼샌드( @ )는 이러한 기호가 텍스트 파일에 나열됨을 나타냅니다. 대체 방법은 앰퍼샌드 없이 -f 옵션을 사용하여 명령줄의 모든 기호를 나열하는 것입니다. 따라서 다음 명령줄은 위의 절차의 예제와 동일합니다.

pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -f:_myGlobal1 -f:_myGlobal2

하나 또는 두 개의 기호만 제거하려는 경우가 아니면 명령줄에 나열하는 것보다 텍스트 파일을 사용하는 것이 더 간단합니다.

.pdb 파일에서 대부분의 공용 기호를 제거하려는 경우 -F 옵션이 가장 쉬운 방법입니다. -f 옵션을 사용하려면 제거하려는 공용 기호를 나열해야 하지만 -F 옵션을 사용하려면 제거하지 않으려는 공용 기호를 나열해야 합니다. 다른 모든 공용 기호(및 모든 프라이빗 기호)가 제거됩니다. -F 옵션은 -f 옵션과 동일한 두 구문 옵션을 지원합니다. -F: 뒤에 보존할 기호의 이름, 보존할 기호 목록이 포함된 텍스트 파일의 이름 뒤에 -F:@ 중 하나를 지원합니다. 두 경우 모두 데코레이트된 기호 이름을 사용해야 합니다.

예를 들어 다음 명령은 모든 프라이빗 기호와 거의 모든 공용 기호를 제거하여 기호만 _myFunction5_myGlobal7.

pdbcopy c:\dir1\mysymbols.pdb c:\dir3\mysymbols.pdb -p -F:_myFunction5 -F:_myGlobal7

한 줄에 -f 옵션의 여러 인스턴스를 결합하면 지정된 모든 기호가 제거됩니다. 한 줄에 -F 옵션의 여러 인스턴스를 결합하면 지정된 모든 기호가 유지되고 다른 모든 기호가 제거됩니다. -f를 -F와 결합할 수 없습니다.

모든 프라이빗 기호 데이터를 제거하는 -p 옵션 없이는 -f 및 -F 옵션을 사용할 수 없습니다. 원본 파일에 프라이빗 기호가 없더라도 여전히 -p 옵션을 포함해야 합니다(이 경우에는 아무런 효과가 없음).

-F 옵션은 프라이빗 기호 데이터가 제거되는 것을 방지하는 데 사용할 수 없습니다. 공용 기호 테이블에 포함되지 않은 기호와 함께 이 옵션을 사용하는 경우 PDBCopy는 이를 무시합니다.

mspdb*.dll 파일

PDBCopy는 실행하려면 Mspdb80.dll 파일 또는 Mspdb60.dll 파일에 액세스해야 합니다. 기본적으로 PDBCopy는 Visual Studio .NET 2002 이상 버전의 Visual Studio에서 사용하는 버전인 Mspdb80.dll 사용합니다. 기호가 Visual Studio 6.0 또는 이전 버전을 사용하여 빌드된 경우 PDBCopy에서 Mspdb60.dll 대신 사용할 수 있도록 -vc6 명령줄 옵션을 지정할 수 있습니다. PDBCopy는 -vc6 옵션을 사용하지 않더라도 적절한 파일을 찾습니다. 이러한 파일은 Visual Studio, 플랫폼 SDK 또는 WDK(Windows 드라이버 키트)의 설치 내에서 찾을 수 있습니다.

PDBCopy를 실행하기 전에 컴퓨터에서 올바른 버전의 mspdb*.dll 파일에 액세스할 수 있는지 확인하고 해당 위치가 명령 경로의 일부인지 확인합니다. 그렇지 않은 경우 path 명령을 사용하여 명령 경로 에 이 위치를 추가해야 합니다.

파일 서명 및 SymSrv 인덱스

각 기호 파일에는 고유하게 식별하는 고정 서명이 있습니다. SymSrv는 서명을 사용하여 파일에 대한 고유한 "인덱스 값"을 생성합니다. 두 파일에 서로 다른 콘텐츠 또는 다른 생성 시간이 있는 경우 고유한 서명과 고유한 SymSrv 인덱스 값도 있습니다.

PDBCopy를 사용하여 만든 파일은 고유 인덱스 값 규칙에 대한 예외입니다. PDBCopy가 새 기호 파일을 만들 때 이전 파일과 동일한 서명 및 SymSrv 인덱스 값이 있습니다. 이 기능을 사용하면 기호 관련 도구의 동작을 변경하지 않고 한 파일을 다른 파일로 바꿀 수 있습니다.

새 파일에 고유한 서명과 SymSrv 인덱스가 있으면 -s 옵션을 사용합니다. PDBCopy의 가장 일반적인 사용은 불일치를 일으키지 않고 이전 파일을 바꿀 수 있는 변경된 기호 파일을 만드는 것이기 때문에 대부분의 경우 이 옵션을 사용하지 않을 것입니다. 새 서명으로 인해 SymSrv가 이전 파일과 다른 인덱스 값을 새 파일에 할당하여 새 파일이 이전 파일을 제대로 대체하지 못할 수 있습니다.

전체 명령줄 구문은 PDBCopy Command-Line 옵션을 참조하세요.