Aracılığıyla paylaş


Modül ve İşlev Sahiplerini Belirtme

!analyze ve !owner uzantıları, hata ayıklayıcının karşılaştığı simgelerin sahibini belirlemek için triage.ini adlı bir dosya kullanır.

Bu uzantıları kullandığınızda, işlev veya modül sahibinin kimlikleri "İzleme" sözcüğünden sonra görüntülenir.

triage.ini dosyası, Windows için Hata Ayıklama Araçları yüklemenizin \triage alt dizininde bulunan bir metin dosyasıdır. Windows için Hata Ayıklama Araçları paketinin bir parçası olarak örnek bir triage.ini dosyası eklenir.

Uyarı Windows için Hata Ayıklama Araçları'nın güncelleştirilmiş bir sürümünü geçerli sürümle aynı dizine yüklerseniz, triage.inidahil olmak üzere bu dizindeki tüm dosyaların üzerine yazar. Örnek triage.ini dosyasını değiştirip ya da yerine yenisini koyduktan sonra, dosyanın bir kopyasını farklı bir dizine kaydedin. Hata ayıklayıcılarını yeniden yükledikten sonra, kaydedilen triage.ini'ı varsayılan sürümün yerine kopyalayabilirsiniz.

triage.ini Dosyasının Biçimi

triage.ini dosyası hata ayıklayıcıya ayrılmış bir işlevin sahibini belirlemenize yardımcı olmak için tasarlanmış olsa da, bu dosyadaki "sahip" dizeleri hata ayıklamada size yardımcı olabilecek her şey olabilir. Dizeler, kodu yazan veya koruyan kişilerin adları olabilir. Ya da dizeler, bir modülde veya işlevde hata oluştuğunda neler yapabileceğiniz hakkında kısa yönergeler olabilir.

Bu dosyadaki her satır aşağıdaki söz dizimine sahiptir.

Module[!Function]=Owner 

Yıldız işareti (*) yalnızca bir modülün veya işlev adının sonuna ekleyebilirsiniz. Başka bir yerde görünürse, sabit karakter olarak yorumlanır.

Sahip dizesinde boşluk ekleyemezsiniz. Sahip dizesinde boşluklar varsa, bunlar yoksayılır.

Söz dizimi seçenekleri hakkında daha fazla bilgi için bkz. Özel triage.ini Sözdizimi.

Aşağıdaki örneklerde örnek bir triage.ini dosyası gösterilmektedir.

module1=Person1
module2!functionA=Person2
module2!functionB=Person3
module2!funct*=Person4
module2!*=Person5
module3!singleFunction=Person6
mod*!functionC=Person7

Triage.ini ve !owner

!owner uzantısına bir modül veya işlev adı geçirdiğinizde, hata ayıklayıcı "İzleme" sözcüğünü ve ardından modülün veya işlevin sahibinin adını görüntüler.

Aşağıdaki örnekte önceki örnek triage.ini dosyası kullanılmaktadır.

0:000> !owner module2!functionB
Followup:  Person3

Dosyaya göre "Person3" module2!functionB ve "Person4" module2!funct\'e sahiptir. Bu iki dize de !owner komutuna geçirilen bağımsız değişkenle eşleştiğinden, daha eksiksiz eşleşme tercih edilir.

Triage.ini ve !analyze

!analyze uzantısını kullandığınızda, hata ayıklayıcı yığındaki en üst hatalı çerçeveye bakar ve modülün sahibini ve bu çerçevedeki işlevi belirlemeye çalışır. Hata ayıklayıcı sahibi saptayabiliyorsa, sahip bilgileri görüntülenir.

Hata ayıklayıcı sahibi tespit edemezse, sonraki yığın çerçevesine geçer ve ya sahibi belirleyene kadar ya da yığını tamamen inceleyene kadar bu şekilde devam eder.

Hata ayıklayıcı sahibi saptayabiliyorsa, sahip adı "İzleme" sözcüğünden sonra görüntülenir. Hata ayıklayıcı herhangi bir bilgi bulmadan yığının tamamını ararsa, hiçbir ad görüntülenmez.

Aşağıdaki örnek, bu konunun önceki bölümlerinde verilen örnek triage.ini dosyasını kullanır.

Yığındaki ilk çerçevenin MyModule!someFunction olduğunu varsayalım. Hata ayıklayıcı, triage.ini dosyasında MyModule öğesini bulamıyor. Ardından, yığındaki ikinci çerçeveye devam eder.

İkinci çerçevenin module3!anotherFunction olduğunu varsayalım. Hata ayıklayıcısı module3 için bir girdi görür, ancak bu modülde anotherFunction ile eşleşme yoktur. Ardından, hata ayıklayıcı üçüncü çerçeveye devam eder.

Üçüncü çerçevenin module2!functionC olduğunu varsayalım. Hata ayıklayıcı ilk olarak tam eşleşme arar, ancak böyle bir eşleşme yoktur. Hata ayıklayıcısı daha sonra işlev adını kırpar ve triage.ini'da module2!funct\*'yi keşfeder. Hata ayıklayıcısı sahibin "Person4" olduğunu belirlediğinden bu eşleşme aramayı sonlandırır.

Hata ayıklayıcısı daha sonra aşağıdaki örneğe benzer bir çıktı görüntüler.

0:000> !analyze
*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************

Use !analyze -v to get detailed debugging information.

Probably caused by : module2 ( module2!functionC+15a )

Followup: Person4
---------

Daha eksiksiz bir eşleşme, daha kısa bir eşleşmeden önceliklidir. Ancak, modül adı eşleşmesi her zaman işlev adı eşleşmesi için tercih edilir. Modül2!funct\* bu triage.ini dosyasında olmasaydı hata ayıklayıcı eşleşme olarak module2!\* öğesini seçerdi. Hem module2!funct\* hem de module2!\* kaldırılmış olsaydı mod*!functionC seçilmiş olurdu.

Özel triage.ini Söz Dizimi

Bir modül adından sonra !\* ekler veya ünlem işareti ve işlev adını atlarsanız, o modüldeki tüm işlevler belirtilir. Bu modüldeki bir işlev de ayrı olarak belirtilirse, daha kesin belirtim önceliklidir.

Modül adı veya işlev adı olarak "varsayılan" kullanırsanız, joker karakterle eşdeğerdir. Örneğin nt!\* nt!default ile aynıdır ve varsayılan*!\* ile aynıdır.

Eşleşme yapılırsa, ancak eşittir işaretinin (=) sağında yoksay sözcüğü görünürse, hata ayıklayıcı bir sonraki kareye devam eder.

Sahip adının önüne last_ veya maybe_ ekleyebilirsiniz. Bu ön ek, !analyze komutunu çalıştırdığınızda bu sahibe daha az öncelik tanır. Hata ayıklayıcı, yığında daha yüksek olan bir maybe_ eşleşmesi yerine yığında daha düşük olan kesin bir eşleşme seçer. Hata ayıklayıcı, yığında daha yüksek olan bir last_ eşleşmesi yerine yığında daha düşük olan bir maybe_ eşleşmesi de seçer.

Örnek triage.ini

Windows için Hata Ayıklama Araçları paketine örnek bir triage.ini şablonu eklenmiştir. İstediğiniz modüllerin ve işlevlerin sahiplerini bu dosyaya ekleyebilirsiniz. Genel bir varsayılan değerin olmamasını istiyorsanız, bu dosyanın başındaki default=MachineOwner satırını silin.