Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Birçok sürücü hata denetimi geri çağırma rutinleri sağlar. Windows bir hata denetimi gerçekleştirdiğinde, sistemi kapatmadan önce bu yordamları çağırır. Bu yordamlar , geri çağırma verileri ve ikincil geri çağırma verileri olarak bilinen bellek alanlarını belirtebilir ve bunlara yazabilir.
BugCheckCallbackKBUGCHECK_CALLBACK_ROUTINE kullanır
Bu yordam tarafından yazılan veriler geri çağırma verilerinin bir parçası haline gelir. Veriler hata dökümü dosyasına eklenmez.
BugCheckSecondaryDumpDataCallbackkullanımı KBUGCHECK_REASON_CALLBACK_ROUTINE
Bu yordam tarafından yazılan veriler ikincil geri çağırma verilerinin bir parçası olur. Veriler kilitlenme bilgi dökümü dosyasına dahil edilmiştir.
BugCheckAddPagesCallback, KBUGCHECK_REASON_CALLBACK_ROUTINE kullanır.
Bu yordam tarafından belirtilen sayfalar geri arama verilerinin bir parçası olur. Bu sayfalardaki veriler bellek dökümü dosyasına eklenir.
Hata ayıklayıcısı tarafından kullanılabilen geri çağırma ve ikincil geri çağırma verilerinin miktarı birkaç faktöre bağlıdır:
Kilitlenen bir sistemde canlı hata ayıklama gerçekleştiriyorsanız, BugCheckCallback tarafından yazılmış veya BugCheckAddPagesCallback tarafından belirtilmiş geri çağırma verileri kullanılabilir. İkincil geri çağırma verileri, sabit bir bellek konumunda depolanmadığından kullanılamaz.
Tam Bellek Dökümü veya Çekirdek Bellek Dökümü hatalarını ayıklıyorsanız, BugCheckAddPagesCallback tarafından belirtilen geri çağırma verileri ve BugCheckSecondaryDumpDataCallback tarafından yazılan ikincil geri çağırma verileri kullanılabilir. BugCheckCallback tarafından yazılan geri çağırma verileri mevcut olmayacak.
Küçük Bellek Dökümü ayıklıyorsanız, callback verileri kullanılamaz. İkincil geri çağırma verileri kullanılabilir olacaktır.
Bu farklı döküm dosyası boyutları hakkında daha fazla bilgi için Kernel-Mode Döküm Dosyalarının Çeşitleri bölümüne bakın.
Geri Çağırma Verilerini Görüntüleme
Hata denetimi geri çağırma verilerini görüntülemek için !bugdump uzantısını kullanabilirsiniz.
Hiçbir parametre olmadan , !bugdump tüm geri çağırmalar için verileri görüntüler.
Belirli bir geri çağırma yordamının verilerini görüntülemek için !bugdumpBileşeni'ni kullanın; burada Bileşen , bu yordam kaydedildiğinde KeRegisterBugCheckCallback'e geçirilen parametreyle aynı parametredir.
İkincil Geri Çağırma Verilerini Görüntüleme
İkincil geri çağırma verilerini görüntülemek için iki yöntem vardır. .enumtag komutunu kullanabilir veya kendi hata ayıklayıcı uzantınızı yazabilirsiniz.
İkincil geri çağırma verilerinin her bloğu bir GUID etiketiyle tanımlanır. Bu etiket, BugCheckSecondaryDumpDataCallback'e geçirilen ReasonSpecificData parametresinin KBUGCHECK_SECONDARY_DUMP_DATA Guid alanı tarafından belirtilir.
.enumtag (İkincil Geri Çağırma Verilerini Numaralandır) komutu çok hassas bir araç değildir. Her ikincil veri bloğunu görüntüler, etiketi gösterir ve ardından verileri onaltılık ve ASCII biçiminde gösterir. Genellikle yalnızca ikincil veri blokları için gerçekte hangi etiketlerin kullanıldığını belirlemek yararlıdır.
Bu verileri daha pratik bir şekilde kullanmak için kendi hata ayıklayıcı uzantınızı yazmanız önerilir. Bu uzantının dbgeng.h üst bilgi dosyasındaki yöntemleri çağırması gerekir. Ayrıntılar için bkz. Yeni Hata Ayıklayıcı Uzantıları Yazma.
İkincil veri bloğunun GUID etiketini biliyorsanız, uzantınız verilere erişmek için IDebugDataSpaces3::ReadTagged yöntemini kullanmalıdır. Prototipi aşağıdaki gibidir:
STDMETHOD(ReadTagged)(
THIS_
IN LPGUID Tag,
IN ULONG Offset,
OUT OPTIONAL PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG TotalSize
) PURE;
Bu yöntemin nasıl kullanılacağına yönelik bir örnek aşağıda verilmiştir:
UCHAR RawData[MY_DATA_SIZE];
GUID MyGuid = .... ;
Success = DataSpaces->ReadTagged( &MyGuid, 0, RawData,
sizeof(RawData), NULL);
Çok küçük bir BufferSize sağlarsanız, ReadTagged başarılı olur ancak Buffer'a yalnızca istenen bayt sayısını yazar. Çok büyük bir BufferSize belirtirseniz, ReadTagged başarılı olur ancak Buffer'a yalnızca gerçek blok boyutunu yazar. TotalSize için bir işaretçi sağlarsanız ReadTagged bunu kullanarak gerçek bloğun boyutunu döndürür. Engellemeye erişilemiyorsa ReadTagged bir hata durum kodu döndürür.
İki blok aynı GUID etiketlerine sahipse, ilk eşleşen blok döndürülür ve ikinci blok erişilemez.
Bloğunuzun GUID etiketinden emin değilseniz, etiketli blokları numaralandırmak için IDebugDataSpaces3::StartEnumTagged, IDebugDataSpaces3::GetNextTagged ve IDebugDataSpaces3::EndEnumTagged yöntemlerini kullanabilirsiniz. Prototipleri aşağıdaki gibidir:
STDMETHOD(StartEnumTagged)(
THIS_
OUT PULONG64 Handle
) PURE;
STDMETHOD(GetNextTagged)(
THIS_
IN ULONG64 Handle,
OUT LPGUID Tag,
OUT PULONG Size
) PURE;
STDMETHOD(EndEnumTagged)(
THIS_
IN ULONG64 Handle
) PURE;
Geri Çağırma Yordamlarında Hata Ayıklama
Geri çağırma yordamının kendisinde hata ayıklamak da mümkündür. Geri çağırma rutinleri içindeki kesme noktaları, diğer kesme noktaları gibi çalışır.
Geri çağırma yordamı ikinci bir hata denetimine neden olursa, öncelikle bu yeni hata denetimi ele alınacaktır. Ancak, Windows Durdurma işleminin belirli bölümlerini yinelemez; örneğin, ikinci bir kilitlenme bilgi dökümü dosyası yazmaz. Mavi ekranda görüntülenen Durdurma kodu ikinci hata denetimi kodu olacaktır. Bir çekirdek hata ayıklayıcısı ekliyse, her iki hata denetimiyle ilgili iletiler genellikle görüntülenir.