Aracılığıyla paylaş


Sembol Yolları

DbgHelp kitaplığı, hata ayıklama simgelerini (.pdb ve .dbg dosyaları) bulmak için sembol arama yolunu kullanır. Arama yolu, noktalı virgülle ayrılmış bir veya daha fazla yol öğesinden oluşabilir.

Arama Yollarını Belirtme

Sembol işleyicisinin sembol dosyaları için disk dizinlerini nerede arayacağını belirtmek için SymSetSearchPath işlevini çağırın. Alternatif olarak, SymInitialize işlevinin UserSearchPath parametresinde bir sembol arama yolu belirtebilirsiniz.

SymInitialize içindeki UserSearchPath parametresi ve SymSetSearchPathSearchPath parametresi, noktalı virgülle ayrılmış bir yolu veya yol dizisini belirten null olarak sonlandırılan bir dizeye işaretçi alır. Sembol işleyicisi, sembol dosyalarını aramak için bu yolları kullanır. Bu parametre NULL ise, sembol işleyicisi simgelerin arandığı modülü içeren dizinde arama yapın. Aksi takdirde, bu parametreNULL olmayan bir değeri olarak belirtilirse, sembol işleyicisi modül dizininde aramadan önce uygulama tarafından ayarlanan yolları arar. _NT_SYMBOL_PATH veya _NT_ALT_SYMBOL_PATH ortam değişkenini ayarlarsanız, sembol işleyicisi sembol dosyalarını aşağıdaki sırayla arar:

  1. _NT_SYMBOL_PATH ortam değişkeni.
  2. _NT_ALT_SYMBOL_PATH ortam değişkeni.
  3. İlgili modülü içeren dizin.

Arama yollarını almak için SymGetSearchPath işlevini çağırın.

Program veritabanı (.pdb) dosyalarının arama yolu, hata ayıklama (.dbg) dosyalarının yolundan farklıdır. Algoritma, sembol kitaplığının işlevselliğine göre belirlenir. Varsayılan olarak, Microsoft Visual C/C++ Microsoft biçim simgeleri oluşturur, bunları görüntüden ayırır ve ayrı bir .pdb dosyasına yerleştirir. .pdb dosyası genellikle yürütülebilir görüntüyü içeren dizinde bulunur. Visual C/C++ yürütülebilir görüntüdeki .pdb dosyasının mutlak yolunu ekler. Sembol işleyicisi .pdb dosyasını bu konumda bulamazsa veya .pdb dosyası başka bir dizine taşındıysa, sembol işleyici .dbg dosyaları için açıklanan arama yolunu kullanarak .pdb dosyasını bulur.

Yol Öğesi Türleri

Üç tür yol öğesi vardır.

Standart Yol Öğesi

Standart bir yol öğesi, yol öğesi tarafından belirtilen dizinin köküne bakılarak aranılır. Sembol işleyicisi ayrıca, simgelerin aranmakta olduğu modülün dosya uzantısıyla eşleşen "sembollerin" alt dizininde de görünür. Bu genellikle "dll", "exe" veya "sys" şeklindedir. Son olarak, uzantıyla aynı ada sahip bir dizine sahip "symbols" adlı bir alt dizine bakar. Örneğin, sembol yolu öğesi "c:\mySymbols" ise ve simgelerin aranmakta olduğu dosya "boo.dll" ise, aşağıdaki dizinlerde arama yapılır.

  • c:\mySymbols
  • c:\mySymbols\dll
  • c:\mySymbols\symbols\dll

Sembol işleyicisi, sembol sunucusu veya önbellek ölçütlerini karşılamayan yol öğelerini aramak için bu mantığı kullanır (aşağıda açıklanmıştır).

Sembol Sunucusu Yol Öğesi

sembol sunucusu yol öğesi, söz konusu modülle tam olarak eşleşen bir simgeyi bulabilen özel bir teknoloji kullanır. Daha fazla bilgi için bkz. SymSrv kullanma.

Sembol işleyicisi, "srv*" metniyle başlıyorsa bir yol öğesini sembol sunucusu olarak ele alır.

Not

"srv*" metni belirtilmemişse ancak gerçek yol öğesi bir sembol sunucusu deposuysa, simge işleyicisi "srv*" belirtilmiş gibi davranır. Sembol işleyicisi, belirtilen yolun kök dizininde "pingme.txt" adlı bir dosyanın varlığını arayarak bu belirlemeyi yapar.

 

Önbellek Yolu Öğesi

önbellek yol öğesi, sembol sunucusu yol öğesindeki bir çeşitlemedir.

Bu dizin, diğer sembol sunucularda olduğu gibi arandı. Ancak, sembol burada bulunmazsa ve sembol yolunun zincirinin daha aşağısındaki bir yol öğesinde bulunursa, simge kopyalanır ve bu öğede belirtilen sembol sunucusunda depolanır.

Sembol işleyicisi, "cache*" metniyle başlıyorsa yol öğesini önbellek öğesi olarak ele alır. "c:\myCache" içinde bir önbellek belirtmek için "cache*c:\myCache" sembol yolu öğesini kullanın.

Örnek Arama Yolu

Bunun nasıl çalıştığını görmek için bu arama yolunu ayarlayın.

cache*c:\myCache;srv*\\symbols\symbols

Aşağıda, yukarıdaki arama yolunu kullanarak ntdll.pdb araması yaparken sembol işleyicisinin ayrıntılı çıkışının bir listesi verilmiştir.

DBGHELP: .\ntdll.pdb - file not found
DBGHELP: .\dll\ntdll.pdb - file not found
DBGHELP: .\symbols\dll\ntdll.pdb - file not found
SYMSRV: c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb not found
SYMSRV: ntdll.pdb from \\symbols\symbols: 10497024 bytes - copied
DBGHELP: c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb already cached
DBGHELP: ntdll - private symbols & lines
c:\myCache\ntdll.pdb\0F7FCF88442F4B0E9FB51DC4A754D9DE2\ntdll.pdb

Çıktının ilk üç satırı, .ilk yol öğesini işleyen sembol işleyicisini gösterir. Bu standart bir yol öğesidir.

Dördüncü satır, bir önbellek yolu öğesi olan cache*c:\myCache ikinci yol öğesinde dosyayı aramak için sembol sunucusunu kullanan sembol işleyicisini gösterir.

Beşinci satır, dosyanın sembol sunucu yolu öğesi olan srv*\\symbols\symbolsüçüncü yol öğesinde bulunduğunu gösterir.

Altıncı satır, dosyanın önbelleğe kopyalandığını gösterir.

Dosyanın önbellekten açıldığı son iki satır.