Aracılığıyla paylaş


PDBCopy'yi kullanma

PDBCopy, tam simge dosyasından çıkarılmış bir simge dosyası oluşturan bir komut satırı aracıdır. Başka bir deyişle, hem özel simge verilerini hem de genel simge tablosunu içeren bir sembol dosyası alır ve bu dosyanın yalnızca ortak simge tablosunu içeren bir kopyasını oluşturur. Hangi PDBCopy seçeneklerinin kullanıldığına bağlı olarak, kaldırılan simge dosyası genel simge tablosunun tamamını veya ortak simge tablosunun belirtilen bir alt kümesini içerir.

WDK'de PDBCopy'nin konumu için bkz. Windows için Hata Ayıklama Araçlarına Dahil Edilen Araçlar'dakiYükleme dizini.

PDBCopy, herhangi bir PDB biçimli simge dosyasıyla (dosya adı uzantısı .pdb ile) çalışır, ancak eski biçim (.dbg) sembol dosyalarıyla çalışmaz.

Genel simge tablolarının ve özel simge verilerinin açıklaması için bkz. Genel ve Özel Simgeler.

Özel Simgeleri Kaldırma

Tüm ortak simgeleri içeren ve özel simgelerin hiçbirini içermeyen bir kaldırılmış simge dosyası oluşturmak istiyorsanız PDBCopy'yi üç parametreyle kullanın: özgün simge dosyasının yolu ve adı, yeni simge dosyasının yolu ve adı ve -p seçeneği.

Örneğin, aşağıdaki komut, mysymbols.pdb ile aynı ortak simge tablosunu içeren ancak özel simge verilerinin hiçbirini içermeyen publicsymbols.pdb adlı yeni bir dosya oluşturur:

pdbcopy mysymbols.pdb publicsymbols.pdb -p

mysymbols.pdb zaten kaldırılmış bir simge dosyasıysa, yeni dosyanın ve eski dosyanın sembolik içeriği aynı olur.

Bu komutu verdikten sonra, yeni dosyayı yeni bir konuma taşımanız ve simge dosyasının özgün adıyla (bu örnekte mysymbols.pdb) yeniden adlandırmanız gerekir çünkü hata ayıklama programlarının ve simge ayıklama programlarının çoğu belirli bir dosya adına dayalı sembolleri arar. Alternatif olarak, farklı dizinler belirtildiği sürece, giriş dosyası ve PDBCopy komut satırındaki çıkış dosyası için aynı dosya adını kullanabilirsiniz:

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

Not PDBCopy çalıştırılmadan önce hedef dosya mevcut olmamalıdır. Bu ada sahip bir dosya varsa, çeşitli hatalar oluşabilir.

Özel Simgeleri ve Seçili Genel Simgeleri Kaldırma

Yalnızca özel simge verilerini kaldırmakla kalmaz, aynı zamanda ortak simge tablosundaki bilgi miktarını azaltmak istiyorsanız, kaldırılacak ortak simgelerin listesini belirtmek için -f seçeneğini kullanabilirsiniz.

Aşağıdaki örnekte bu yordam gösterilmektedir:

  1. Kaldırmak istediğiniz simgelerin süslemeleri de dahil olmak üzere tam adlarını belirleyin. Süslü simge adlarından emin değilseniz dbh aracını kullanarak bunları belirleyebilirsiniz. Ayrıntılar için bkz. Belirli Bir Simgenin Süslemelerini Belirleme. Bu örnekte, kaldırmak istediğiniz simgelerin süslü adlarının _myGlobal1 ve _myGlobal2 olduğunu düşünelim.

  2. Kaldırılacak simgelerin listesini içeren bir metin dosyası oluşturun. Bu dosyadaki her satır, süslemeler dahil olmak üzere bir simgenin adını içermelidir ancak modül adlarını içermemelidir. Bu örnekte, dosya aşağıdaki iki satırı içerir:

    _myGlobal1
    _myGlobal2
    

    Dosyaya seçtiğiniz herhangi bir ad verilebilir. Bu dosyayı listfile.txt adlandırıp C:\Temp dizinine yerleştirdiğinizden söz edelim.

  3. Aşağıdaki PDBCopy komut satırını kullanın:

    pdbcopy OldPDB NewPDB -p -f:@TextFile
    

    Burada OldPDB ve NewPDB özgün simge dosyası ve yeni sembol dosyasıdır ve TextFile ikinci adımda oluşturulan dosyadır. -f seçeneği, belirli ortak simgelerin kaldırılması gerektiğini ve ve işareti ( @ ) bu simgelerin belirtilen metin dosyasında listelendiğini gösterir.

    Geçerli örnekte komut şöyle görünür:

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

    Bu, C:\dir3\mysymbols.pdb, which does not contain any private symbols and does not contain the two global variables you listed in listfile.txtyeni bir sembol dosyası oluşturur.

Bu örnekte gösterildiği gibi, PDBCopy'nin -f seçeneği belirli bir ortak simge listesini kaldırır. Ve işareti ( @ ) bu simgelerin bir metin dosyasında listelendiğini gösterir. Alternatif bir yöntem, ve işareti olmadan -f seçeneğini kullanarak komut satırındaki tüm simgeleri listelemektir. Bu nedenle, aşağıdaki komut satırı yukarıdaki yordamdaki örnekle eşdeğerdir:

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

Yalnızca bir veya iki simgeyi kaldırmak istemediğiniz sürece, metin dosyası kullanmak, bunları komut satırında listelemekten daha kolaydır.

.pdb dosyanızdan ortak simgelerin çoğunu kaldırmak istiyorsanız, -F seçeneği en kolay yöntemdir. -f seçeneği kaldırmak istediğiniz ortak simgeleri listelemenizi gerektirse de, -F seçeneği kaldırmak istemediğiniz ortak simgeleri listelemenizi gerektirir. Diğer tüm ortak simgeler (ve tüm özel simgeler) kaldırılır. -F seçeneği, -f seçeneğiyle aynı iki söz dizimi seçeneğini destekler: -F: ardından korunacak simgenin adı veya -F:@ ve ardından korunacak simgelerin listesini içeren bir metin dosyasının adı. Her iki durumda da, süslü simge adları kullanılmalıdır.

Örneğin, aşağıdaki komut tüm özel simgeleri ve hemen hemen tüm ortak simgeleri kaldırarak yalnızca _myFunction5 ve _myGlobal7 simgeleri bırakır:

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

-f seçeneğinin birden çok örneğini tek bir satırda birleştirirseniz, belirtilen tüm simgeler kaldırılır. -F seçeneğinin birden çok örneğini tek bir satırda birleştirirseniz, belirtilen tüm simgeler korunur ve diğer tüm simgeler kaldırılır. -f -F ile birleştiremezsiniz.

-f ve -F seçenekleri, tüm özel simge verilerini kaldıran -p seçeneği olmadan kullanılamaz. Özgün dosyanız özel simge içermese bile, -p seçeneğini eklemeniz gerekir (bu durumda hiçbir etkisi olmasa da).

özel simge verilerinin kaldırılmasını önlemek için -F seçeneği kullanılamaz. Bu seçeneği ortak simge tablosuna dahil edilmeyen bir simgeyle kullanırsanız PDBCopy bunu yoksayar.

mspdb*.dll Dosyası

PDBCopy'nin çalışması için Mspdb80.dll dosyasına veya Mspdb60.dll dosyasına erişmesi gerekir. PDBCopy varsayılan olarak Visual Studio .NET 2002 ve sonraki Visual Studio sürümleri tarafından kullanılan Mspdb80.dllkullanır. Simgeleriniz Visual Studio 6.0 veya önceki bir sürüm kullanılarak oluşturulduysa, PDBCopy'nin bunun yerine Mspdb60.dll kullanması için -vc6 komut satırı seçeneğini belirtebilirsiniz, ancak bu gerekli değildir. -vc6 seçeneği kullanılmasa bile PDBCopy uygun dosyayı arar. Bu dosyaları Visual Studio, Platform SDK'sı veya Windows Sürücü Seti (WDK) yüklemenizde bulabilirsiniz.

PDBCopy'yi çalıştırmadan önce, mspdb*.dll dosyasının doğru sürümünün bilgisayarınız tarafından erişilebilir olduğundan emin olun ve konumunun komut yolunun bir parçası olduğundan emin olun. Değilse, bu konumu komut yoluna eklemek için path komutunu kullanmanız gerekir.

Dosya İmzası ve SymSrv Dizini

Her simge dosyasının benzersiz olarak tanımlayan sabit bir imzası vardır. SymSrv, imzayı kullanarak dosya için benzersiz bir "dizin değeri" oluşturur. İki dosyanın içeriği veya oluşturma süreleri farklıysa, bunlar ayrı imzalara ve ayrı SymSrv dizin değerlerine de sahip olur.

PDBCopy ile oluşturulan dosyalar, benzersiz dizin değerlerinin kuralına özel durum oluşturur. PDBCopy yeni bir sembol dosyası oluşturduğunda, eski dosyayla aynı imzaya ve SymSrv dizin değerine sahiptir. Bu özellik, sembolle ilgili araçların davranışını değiştirmeden bir dosyanın diğeriyle değiştirilmesini sağlar.

Yeni dosyanın ayrı bir imzaya ve SymSrv dizinine sahip olmasını istiyorsanız -s seçeneğini kullanın. Çoğu durumda bu seçeneği kullanmak istemezsiniz, çünkü PDBCopy'nin en yaygın kullanımı, uyuşmazlıklara neden olmadan eski dosyanın yerini alabilen değiştirilmiş bir simge dosyası oluşturmaktır. Yeni bir imza, SymSrv'nin yeni dosyaya eski dosyadan farklı bir dizin değeri atamasına neden olabilir ve yeni dosyanın eski dosyayı düzgün bir şekilde değiştirmesini engelleyebilir.

Tam komut satırı söz dizimi için bkz. PDBCopy Command-Line Seçenekleri.