Aracılığıyla paylaş


SymStore kullanma

SymStore (symstore.exe), sembol depoları oluşturmaya yönelik bir araçtır. Windows için Hata Ayıklama Araçları paketine dahildir.

SymStore sembolleri, hata ayıklayıcının görüntünün zaman damgasına ve boyutuna (.dbg veya yürütülebilir dosya için) ya da imza ve yaşa (.pdb dosyası için) göre simgeleri aramasına olanak tanıyan bir biçimde depolar. Sembol deposunun geleneksel sembol depolama biçimine göre avantajı, tüm sembollerin aynı sunucuda depolanabilmesi veya bunlara başvurulabilmesi ve hata ayıklayıcı tarafından ilgili sembolü içeren ürünün önceden bilinmesi gerekmeden alınabilmesidir.

.pdb sembol dosyalarının birden çok sürümünün (örneğin, genel ve özel sürümler) her biri aynı imza ve yaş içerdiğinden aynı sunucuda depolanamayacağını unutmayın.

SymStore İşlemleri

SymStore'ya yapılan her çağrı bir işlem olarak kaydedilir. İki tür işlem vardır: ekleme ve silme.

Sembol deposu oluşturulduğunda, sunucunun kökü altında "000admin" adlı bir dizin oluşturulur. 000admin dizini, her işlem için bir dosyanın yanı sıra Server.txt ve History.txtgünlük dosyalarını içerir. Server.txt dosyası, şu anda sunucuda olan tüm işlemlerin listesini içerir. History.txt dosyası tüm işlemlerin kronolojik geçmişini içerir.

SymStore sembol dosyalarını her depolar veya kaldırırken yeni bir işlem numarası oluşturulur. Ardından, adı bu işlem numarası olan bir dosya 000admin içinde oluşturulur. Bu dosya, bu işlem sırasında sembol deposuna eklenmiş olan tüm dosyaların veya işaretçilerin listesini içerir. Bir işlem silinirse, SymStore hangi dosyaları ve işaretçileri silmesi gerektiğini belirlemek için işlem dosyasını okur.

ekleme ve del seçenekleri, ekleme veya silme işleminin gerçekleştirilip gerçekleştirilmeyeceğini belirtir. ekleme işlemine /p seçeneğinin eklenmesi, bir işaretçinin ekleneceğini belirtir; /p seçeneğinin atlanması, gerçek simge dosyasının ekleneceğini belirtir.

Sembol depoyu iki ayrı aşamada oluşturmak da mümkündür. İlk aşamada, dizin dosyası oluşturmak için /x seçeneğiyle SymStore kullanırsınız. İkinci aşamada, dizin dosyasındaki bilgilerden dosyaların veya işaretçilerin gerçek depounu oluşturmak için /y seçeneğiyle SymStore kullanırsınız.

Bu, çeşitli nedenlerle yararlı bir teknik olabilir. Örneğin, bu, dizin dosyası hala mevcut olduğu sürece, depo bir şekilde kaybolursa sembol deposunun kolayca yeniden oluşturulmasını sağlar. Belki de sembol dosyalarını içeren bilgisayarın, sembol deposunun oluşturulacağı bilgisayara yavaş bir ağ bağlantısı vardır. Bu durumda, simge dosyalarıyla aynı makinede dizin dosyasını oluşturabilir, dizin dosyasını ikinci makineye aktarabilir ve ardından depoyu ikinci makinede oluşturabilirsiniz.

Tüm SymStore parametrelerinin tam listesi için bkz. SymStore Command-Line Seçenekleri.

Not

SymStore, birden çok kullanıcının eşzamanlı işlemlerini desteklemez. Bir kullanıcının sembol deposunun "yöneticisi" olarak atanıp tüm ekleme ve silme işlemlerinden sorumlu olması önerilir.

 

İşlem Örnekleri

Aşağıda, Windows Server 2003'ün 3790 derlemesi için \\sampledir\symsrv'ye sembol işaretçileri ekleyen SymStore'nun iki örneği verilmiştir:

symstore add /r /p /f \\BuildServer\BuildShare\3790free\symbols\*.*
   /s \\sampledir\symsrv /t "Windows Server 2003" /v "Build 3790 x86 free"
   /c "Sample add"
symstore add /r /p /f \\BuildServer\BuildShare\3790Chk\symbols\*.* 
   /s \\sampledir\symsrv /t "Windows Server 2003" /v "Build 3790 x86 checked"
   /c "Sample add"

Aşağıdaki örnekte, SymStore \\largeapp\appserver\bins içindeki bir uygulama projesi için gerçek sembol dosyalarını \\testdir\symsrv dosyasına ekler:

symstore add /r /f \\largeapp\appserver\bins\*.* /s \\testdir\symsrv 
   /t "Large Application" /v "Build 432" /c "Sample add"

Aşağıda bir dizin dosyasının nasıl kullanıldığına bir örnek verilmiştir. İlk olarak, SymStore \\largeapp\appserver\bins\ içindeki sembol dosyalarının koleksiyonunu temel alan bir dizin dosyası oluşturur. Bu durumda, dizin dosyası \\hubserver\hubshare adlı üçüncü bir bilgisayara yerleştirilir. "\\largeapp\appserver" dosya ön ekinin gelecekte değişebileceğini belirtmek için /g seçeneğini kullanırsınız:

symstore add /r /p /g \\largeapp\appserver /f 
   \\largeapp\appserver\bins\*.* 
   /x \\hubserver\hubshare\myindex.txt

Şimdi tüm sembol dosyalarını \\largeapp\appserver makinesinin dışına taşıyabileceğinizi ve \\myarchive\appserver dizinine yerleştirdiğiniz varsayılır. Ardından simge deposunun kendisini \\hubserver\hubshare\myindex.txt dizin dosyasından aşağıdaki gibi oluşturabilirsiniz:

symstore add /y \\hubserver\hubshare\myindex.txt 
   /g \\myarchive\appserver /s \\sampledir\symsrv /p 
   /t "Large Application" /v "Build 432" /c "Sample Add from Index"

Son olarak, önceki bir işlem tarafından eklenen bir dosyayı silen SymStore örneği aşağıda verilmiştir. İşlem kimliğinin nasıl belirleneceğinin açıklaması için aşağıdaki bölüme bakın (bu örnekte 0000000096).

symstore del /i 0000000096 /s \\sampledir\symsrv

Sıkıştırılmış Dosyalar

SymStore sıkıştırılmış dosyalarla iki farklı şekilde kullanılabilir.

  1. Sembol dosyalarının işaretçilerini depolamak için /p seçeneğiyle SymStore kullanın. SymStore tamamlandıktan sonra, işaretçilerin başvurduğu dosyaları sıkıştırın.
  2. Dizin dosyası oluşturmak için /x seçeneğiyle SymStore kullanın. SymStore tamamlandıktan sonra dizin dosyasında listelenen dosyaları sıkıştırın. Ardından SymStore'/y seçeneğiyle (ve isterseniz /p seçeneği) kullanarak dosyaları veya işaretçileri sembol deposunda depolayın. (SymStore'nun bu işlemi gerçekleştirmek için dosyaların sıkıştırmasını kaldırması gerekmez.)

Simge sunucunuz gerektiğinde dosyaların sıkıştırmasını kaldırmaktan sorumludur.

Sembol sunucunuz olarak SymSrv kullanıyorsanız, tüm sıkıştırma işlemleri Microsoft Windows Yazılım Geliştirme Seti (SDK) ile dağıtılan compress.exe aracı kullanılarak yapılmalıdır. Sıkıştırılmış dosyaların dosya uzantılarındaki son karakter olarak bir alt çizgi olmalıdır (örneğin, module1.pd_ veya module2.db_). Ayrıntılar için bkz. SymSrv kullanma.

server.txt ve history.txt Dosyaları

Bir işlem eklendiğinde, gelecekteki arama özelliği için server.txt ve history.txt birkaç bilgi öğesi eklenir. Aşağıda, ekleme işlemi için server.txt ve history.txt bir satır örneği verilmiştir:

0000000096,add,ptr,10/09/99,00:08:32,Windows XP,x86 fre 1.156c-RTM-2,Added from \\mybuilds\symbols,

Bu virgülle ayrılmış bir çizgidir. Alanlar aşağıdaki gibi tanımlanır.

Alan Açıklama
0000000096 SymStore tarafından oluşturulan işlem kimliği numarası.
eklemek İşlem türü. Bu alan eklemek veya silme olabilir.
ptr Dosyaların veya işaretçilerin eklenip eklenmediği. Bu alan dosya veya ptrolabilir.
10/09/99 İşlemin gerçekleştiği tarih.
00:08:32 İşlemin başlatıldığı zaman.
Windows XP Ürün.
x86 fre Sürüm (isteğe bağlı).
Şuradan eklendi: Açıklama (isteğe bağlı)
Kullanılmamış (Daha sonra kullanmak üzere ayrılmıştır.)

 

İşlem dosyasından 0000000096 bazı örnek satırlar aşağıda verilmiştir. Her satır dizini ve dizine eklenen dosyanın veya işaretçinin konumunu kaydeder.

canon800.dbg\35d9fd51b000,\\mybuilds\symbols\sp4\dll\canon800.dbg
canonlbp.dbg\35d9fd521c000,\\mybuilds\symbols\sp4\dll\canonlbp.dbg
certadm.dbg\352bf2f48000,\\mybuilds\symbols\sp4\dll\certadm.dbg
certcli.dbg\352bf2f1b000,\\mybuilds\symbols\sp4\dll\certcli.dbg
certcrpt.dbg\352bf04911000,\\mybuilds\symbols\sp4\dll\certcrpt.dbg
certenc.dbg\352bf2f7f000,\\mybuilds\symbols\sp4\dll\certenc.dbg

Özgün eklenmiş işlemlerini geri almak için bir del işlemi kullanırsanız, bu satırlar server.txt'den kaldırılır ve aşağıdaki satır history.txt'e eklenir:

0000000105,del,0000000096

Silme işleminin alanları aşağıdaki gibi tanımlanır.

Alan Açıklama
0000000105 SymStore tarafından oluşturulan işlem kimliği numarası.
Del İşlem türü. Bu alan ekle ya da silolabilir.
0000000096 Silinen işlem.

 

Sembol Depolama Biçimi

SymStore, dosya sisteminin kendisini veritabanı olarak kullanır. Simge dosya zaman damgaları, imzalar, yaş ve diğer verileri temel alan dizin adlarıyla büyük bir dizin ağacı oluşturur.

Örneğin, sunucuya birkaç farklı acpi.dbg dosyası eklendikten sonra dizinler şöyle görünebilir:

Directory of \\mybuilds\symsrv\acpi.dbg
10/06/1999  05:46p      <DIR>          .
10/06/1999  05:46p      <DIR>          ..
10/04/1999  01:54p      <DIR>          37cdb03962040
10/04/1999  01:49p      <DIR>          37cdb04027740
10/04/1999  12:56p      <DIR>          37e3eb1c62060
10/04/1999  12:51p      <DIR>          37e3ebcc27760
10/04/1999  12:45p      <DIR>          37ed151662060
10/04/1999  12:39p      <DIR>          37ed15dd27760
10/04/1999  11:33a      <DIR>          37f03ce962020
10/04/1999  11:21a      <DIR>          37f03cf7277c0
10/06/1999  05:38p      <DIR>          37fa7f00277e0
10/06/1999  05:46p      <DIR>          37fa7f01620a0

Bu örnekte, acpi.dbg sembol dosyasının arama yolu şuna benzer olabilir: \\mybuilds\symsrv\acpi.dbg\37cdb03962040.

Arama dizininde üç dosya bulunabilir:

  1. Dosya depolandıysa acpi.dbg orada bulunur.
  2. bir işaretçi depolandıysa, file.ptr adlı bir dosya bulunur ve gerçek sembol dosyasının yolunu içerir.
  3. Şu anda simge deposuna eklenmiş olan bu zaman damgası ve görüntü boyutuna sahip acpi.dbg için tüm geçerli konumların listesini içeren refs.ptr adlı bir dosya.

\\mybuilds\symsrv\acpi.dbg\37cdb03962040 dizin listesinin görüntülenmesi aşağıdakileri sağlar:

10/04/1999  01:54p                  52 file.ptr
10/04/1999  01:54p                  67 refs.ptr

file.ptr dosyası "\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg" metin dizesini içerir. Bu dizinde acpi.dbg adlı bir dosya olmadığından, hata ayıklayıcı dosyayı \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg konumunda bulmaya çalışır.

refs.ptr içeriği, hata ayıklayıcı tarafından değil, yalnızca SymStore tarafından kullanılır. Bu dosya, bu dizinde gerçekleşen tüm işlemlerin kaydını içerir. refs.ptr dosyasının örnek satırı şu olabilir:

0000000026,ptr,\\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg

Bu, \\mybuilds\symbols\x86\2128.chk\symbols\sys\acpi.dbg için bir işaretçinin "0000000026" işlemiyle eklendiğini gösterir.

Bazı sembol dosyaları çeşitli ürünler, derlemeler veya belirli bir ürün aracılığıyla sabit kalır. Bunun bir örneği msvcrt.pdb dosyasıdır. \\mybuilds\symsrv\msvcrt.pdb dizinini oluşturmak, semboller sunucusuna yalnızca iki msvcrt.pdb sürümünün eklendiğini gösterir:

Directory of \\mybuilds\symsrv\msvcrt.pdb
10/06/1999  05:37p      <DIR>          .
10/06/1999  05:37p      <DIR>          ..
10/04/1999  11:19a      <DIR>          37a8f40e2
10/06/1999  05:37p      <DIR>          37f2c2272

Ancak, \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2 dizinini yaptığınızda, refs.ptr dosyasının içinde birkaç işaretçi olduğunu gösterir.

Directory of \\mybuilds\symsrv\msvcrt.pdb\37a8f40e2
10/05/1999  02:50p              54     file.ptr
10/05/1999  02:50p           2,039     refs.ptr

\\mybuilds\symsrv\msvcrt.pdb\37a8f40e2\refs.ptr içeriği şunlardır:

0000000001,ptr,\\mybuilds\symbols\x86\2137\symbols\dll\msvcrt.pdb
0000000002,ptr,\\mybuilds\symbols\x86\2137.chk\symbols\dll\msvcrt.pdb
0000000003,ptr,\\mybuilds\symbols\x86\2138\symbols\dll\msvcrt.pdb
0000000004,ptr,\\mybuilds\symbols\x86\2138.chk\symbols\dll\msvcrt.pdb
0000000005,ptr,\\mybuilds\symbols\x86\2139\symbols\dll\msvcrt.pdb
0000000006,ptr,\\mybuilds\symbols\x86\2139.chk\symbols\dll\msvcrt.pdb
0000000007,ptr,\\mybuilds\symbols\x86\2140\symbols\dll\msvcrt.pdb
0000000008,ptr,\\mybuilds\symbols\x86\2140.chk\symbols\dll\msvcrt.pdb
0000000009,ptr,\\mybuilds\symbols\x86\2136\symbols\dll\msvcrt.pdb
0000000010,ptr,\\mybuilds\symbols\x86\2136.chk\symbols\dll\msvcrt.pdb
0000000011,ptr,\\mybuilds\symbols\x86\2135\symbols\dll\msvcrt.pdb
0000000012,ptr,\\mybuilds\symbols\x86\2135.chk\symbols\dll\msvcrt.pdb
0000000013,ptr,\\mybuilds\symbols\x86\2134\symbols\dll\msvcrt.pdb
0000000014,ptr,\\mybuilds\symbols\x86\2134.chk\symbols\dll\msvcrt.pdb
0000000015,ptr,\\mybuilds\symbols\x86\2133\symbols\dll\msvcrt.pdb
0000000016,ptr,\\mybuilds\symbols\x86\2133.chk\symbols\dll\msvcrt.pdb
0000000017,ptr,\\mybuilds\symbols\x86\2132\symbols\dll\msvcrt.pdb
0000000018,ptr,\\mybuilds\symbols\x86\2132.chk\symbols\dll\msvcrt.pdb
0000000019,ptr,\\mybuilds\symbols\x86\2131\symbols\dll\msvcrt.pdb
0000000020,ptr,\\mybuilds\symbols\x86\2131.chk\symbols\dll\msvcrt.pdb
0000000021,ptr,\\mybuilds\symbols\x86\2130\symbols\dll\msvcrt.pdb
0000000022,ptr,\\mybuilds\symbols\x86\2130.chk\symbols\dll\msvcrt.pdb
0000000023,ptr,\\mybuilds\symbols\x86\2129\symbols\dll\msvcrt.pdb
0000000024,ptr,\\mybuilds\symbols\x86\2129.chk\symbols\dll\msvcrt.pdb
0000000025,ptr,\\mybuilds\symbols\x86\2128\symbols\dll\msvcrt.pdb
0000000026,ptr,\\mybuilds\symbols\x86\2128.chk\symbols\dll\msvcrt.pdb
0000000027,ptr,\\mybuilds\symbols\x86\2141\symbols\dll\msvcrt.pdb
0000000028,ptr,\\mybuilds\symbols\x86\2141.chk\symbols\dll\msvcrt.pdb
0000000029,ptr,\\mybuilds\symbols\x86\2142\symbols\dll\msvcrt.pdb
0000000030,ptr,\\mybuilds\symbols\x86\2142.chk\symbols\dll\msvcrt.pdb

Bu, \\mybuilds\symsrv dizininde depolanan birden çok simge derlemesi için aynı msvcrt.pdb dosyasının kullanıldığını gösterir.

Dosya ve işaretçi eklemelerinin bir karışımını içeren bir dizin örneği aşağıda verilmiştir:

Directory of E:\symsrv\dbghelp.dbg\38039ff439000
10/12/1999  01:54p         141,232     dbghelp.dbg
10/13/1999  04:57p              49     file.ptr
10/13/1999  04:57p             306     refs.ptr

Bu durumda refs.ptr dosyasında aşağıdaki içerikler bulunur:

0000000043,file,e:\binaries\symbols\retail\dll\dbghelp.dbg
0000000044,file,f:\binaries\symbols\retail\dll\dbghelp.dbg
0000000045,file,g:\binaries\symbols\retail\dll\dbghelp.dbg
0000000046,ptr,\\sampledir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\sampledir2\bin\symbols\retail\dll\dbghelp.dbg

Böylece, 43, 44 ve 45 numaralı işlemler aynı dosyayı sunucuya eklerken, 46 ve 47 numaralı işlemler işaretçileri ekledi. 43, 44 ve 45 işlemleri silinirse dbghelp.dbg dosyası dizinden silinir. Bundan sonra dizin aşağıdaki içeriklere sahip olur:

Directory of e:\symsrv\dbghelp.dbg\38039ff439000
10/13/1999  05:01p                   49 file.ptr
10/13/1999  05:01p                 130 refs.ptr

Şimdi file.ptr "\\sampledir2\bin\symbols\retail\dll\dbghelp.dbg" ve refs.ptr içerir

0000000046,ptr,\\sampledir\bin\symbols\retail\dll\dbghelp.dbg
0000000047,ptr,\\sampledir2\bin\symbols\retail\dll\dbghelp.dbg

refs.ptr dosyasındaki son girdi bir işaretçi olduğunda file.ptr dosyası mevcut olur ve ilişkili dosyanın yolunu içerir. refs.ptr dosyasındaki son girdi bir dosya olduğunda, bu dizinde file.ptr bulunmaz. Bu nedenle, refs.ptr dosyasındaki son girdiyi kaldıran herhangi bir silme işlemi file.ptr dosyasının oluşturulmasına, silinmesine veya değiştirilmesine neden olabilir.