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.
Bu laboratuvar, WinDbg çekirdek hata ayıklayıcısını tanıtır. Yankı çekirdek modu örnek sürücü kodunda hata ayıklamak için WinDbg kullanırsınız.
Laboratuvar hedefleri
Bu laboratuvar, hata ayıklama araçlarını tanıtan, yaygın hata ayıklama komutlarını öğreten, kesme noktalarının kullanımını anlatan ve hata ayıklama uzantılarının nasıl kullanılacağını gösteren egzersizler içerir.
Bu laboratuvarda, aşağıdaki eylemleri keşfetmek için canlı çekirdek hata ayıklama bağlantısı kullanırsınız:
- Windows hata ayıklayıcısı komutlarını kullanma
- Standart komutları kullanın (çağrı yığınları, değişkenler, iş parçacıkları, IRQL)
- Gelişmiş sürücü hata ayıklama komutlarını kullanma (!komutlar)
- Sembolleri kullanma
- Canlı hata ayıklamada kesme noktaları ayarlama
- Çağrı yığınlarını görüntüleme
- Tak Çalıştır cihaz ağacını görüntüleme
- İş parçacığı ve işlem bağlamı ile çalışma
Kullanıcı ve çekirdek modunda hata ayıklama
Windows hata ayıklayıcısı ile çalışırken iki tür hata ayıklama yapabilirsiniz:
Kullanıcı modu - Uygulamalar ve alt sistemler bilgisayarda kullanıcı modunda çalışır. Kullanıcı modunda çalışan işlemler bunu kendi sanal adres alanları içinde yapar. Sistem donanımı, kullanımları için ayrılmamış bellek ve sistemin bütünlüğünü tehlikeye atabilecek diğer bölümleri dahil olmak üzere sistemin birçok bölümüne doğrudan erişim sağlamaları kısıtlanır. Kullanıcı modunda çalışan işlemler sistemden ve diğer kullanıcı modu işlemlerinden etkili bir şekilde yalıtıldığından, bu kaynakları engelleyemezler.
Çekirdek modu - İşletim sistemi ve ayrıcalıklı programlar çekirdek modunda çalışır. Çekirdek modu kodu, sistemin herhangi bir bölümüne erişme iznine sahiptir. Kullanıcı modu kodu gibi kısıtlı değildir. Kullanıcı modunda veya çekirdek modunda çalışan diğer işlemlerin herhangi bir bölümüne erişim sağlayabilir. Çekirdek işletim sistemi işlevselliğinin çoğu ve birçok donanım cihaz sürücüsü çekirdek modunda çalışır.
Bu alıştırma, hem kullanıcı modu hem de çekirdek modunda hata ayıklama sırasında sık kullanılan hata ayıklama komutlarını kapsar. Alıştırma, bazen "bang" !commandsolarak adlandırılan ve çekirdek modunda hata ayıklama için kullanılan hata ayıklama uzantılarını da kapsar.
Laboratuvar kurulumu
Laboratuvarı tamamlamak için aşağıdaki donanıma ihtiyacınız vardır:
- Windows 11 çalıştıran bir dizüstü veya masaüstü bilgisayar (ana bilgisayar)
- Windows 11 çalıştıran ikinci bir dizüstü veya masaüstü bilgisayar (hedef)
- İki bilgisayarı bağlamak için bir ağ hub'ı veya yönlendirici ve ağ kabloları
- Sembol dosyalarını indirmek için İnternet'e erişim
Laboratuvarı tamamlamak için aşağıdaki yazılıma ihtiyacınız vardır:
- Visual Studio
- Windows 11 için Windows Yazılım Geliştirme Seti (SDK)
- Windows 11 için Windows Sürücü Seti (WDK)
- Windows 11 için örnek yankı sürücüsü
Laboratuvarda aşağıdaki bölümler vardır:
- Çekirdek modunda WinDbg oturumuna bağlanma
- Çekirdek Modu Hata Ayıklama Komutları ve Teknikleri
- KMDF yankı sürücüsünü indirme ve derleme
- Yankı sürücüsü örneğini hedef sisteme yükleyin
- Sürücü hakkında bilgi görüntülemek için WinDbg kullanma
- Tak çalıştır cihaz ağacı bilgilerini görüntüle
- Kesme noktaları ve kaynak kodu ile çalışma
- Değişkenleri görüntüleme ve çağrı yığınları
- İşlemleri ve iş parçacıklarını görüntüleme
- IRQL, kayıtlar ve WinDbg oturumunu sonlandırma
- Windows hata ayıklama kaynakları
Çekirdek modunda WinDbg oturumuna bağlanma
Bu bölümde, konak ve hedef sistemde ağ hata ayıklamasını yapılandırın.
Bu laboratuvardaki bilgisayarların çekirdek hata ayıklaması için Ethernet ağ bağlantısı kullanacak şekilde yapılandırılması gerekir.
Bu laboratuvarda iki bilgisayar kullanılır. Windows hata ayıklayıcısı ana bilgisayar sisteminde ve Çekirdek Modu Sürücü Çerçevesi (KMDF) yankı sürücüsü hedef sisteminde çalışır.
İki bilgisayarı bağlamak için bir ağ hub'ı veya yönlendirici ve ağ kabloları kullanın.
Çekirdek modu uygulamalarıyla çalışmak ve WinDbg kullanmak için Ethernet üzerinden KDNET aktarımını kullanmanızı öneririz. Ethernet aktarım protokolünü kullanma hakkında bilgi için bkz. WinDbg ile çalışmaya başlama (çekirdek modu). Hedef bilgisayarı ayarlama hakkında daha fazla bilgi için bkz. El ile sürücü dağıtımı için bilgisayar hazırlama ve KDNET ağ çekirdeği hata ayıklamasını otomatik olarak ayarlama.
Ethernet kullanarak çekirdek modu hata ayıklamasını yapılandırma
Ana bilgisayar IP adresini kaydetme
Hedef sistemde çekirdek modu hata ayıklamasını etkinleştirmek için:
Konak sisteminde bir Komut İstemi penceresi açın ve IPv4 adresini belirlemek için ipconfig girin.
Windows IP Configuration Ethernet adapter Ethernet: Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::c8b6:db13:d1e8:b13b%3 Autoconfiguration IPv4 Address. . : 169.182.1.1 Subnet Mask . . . . . . . . . . . : 255.255.0.0 Default Gateway . . . . . . . . . :Konak sisteminin IP adresini kaydedin: ______________________________________
Hata ayıklamayı etkinleştirmek için önyükleme ayarlarını değiştirme
Aşağıdaki adımları tamamlayarak hedef sistemde çekirdek modu hata ayıklamasını etkinleştirin.
Önemli
Önyükleme bilgilerini değiştirmek için BCDEdit'i kullanmadan önce, test bilgisayarında BitLocker ve Güvenli Önyükleme gibi Windows güvenlik özelliklerini geçici olarak askıya almanız gerekebilir. Test tamamlandığında bu güvenlik özelliklerini yeniden etkinleştirin. Güvenlik özellikleri devre dışı bırakıldığında test bilgisayarını uygun şekilde yönetin. Güvenli önyükleme genellikle UEFI'de devre dışı bırakılır. UEFI ayarına erişmek için Sistem, Kurtarma, Gelişmiş başlatma'yı kullanın. Yeniden başlatıldığında Sorun Giderme, Gelişmiş seçenekler, UEFI Üretici Yazılımı ayarları'nı seçin. UEFI seçeneklerinin yanlış ayarlanması veya BitLocker'ın devre dışı bırakılması sistemin çalışamaz duruma gelmesi için dikkatli olun.
Uyarı
Bağlantının güvenliğini artırmak ve rastgele istemci hata ayıklayıcısı bağlantı isteklerinin riskini azaltmak için otomatik olarak oluşturulan rastgele bir anahtar kullanın. Daha fazla bilgi için bkz. KDNET ağ çekirdeği hata ayıklamasını otomatik olarak ayarlama.
Hedef sistemde çekirdek modu hata ayıklamasını etkinleştirmek üzere KDNET yardımcı programını kullanmak için aşağıdaki adımları gerçekleştirin.
Konak sisteminde WDK KDNET dizinini bulun. Varsayılan olarak burada bulunur.
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64
Bu laboratuvar, her iki bilgisayarın da hem hedef hem de konakta Windows'un 64 bit sürümünü çalıştırdığını varsayar. Böyle bir durum söz konusu değilse, en iyi yaklaşım, hedefin çalıştığı ana bilgisayarda aynı "bitliğe" sahip araçları çalıştırmaktır. Örneğin, hedef 32 bit Windows çalıştırıyorsa, konakta hata ayıklayıcının 32 sürümünü çalıştırın. Daha fazla bilgi için bkz. 32 Bit veya 64 Bit Hata Ayıklama Araçlarını Seçme.
Bu iki dosyayı bulun ve hedef bilgisayarda kullanılabilmeleri için bir ağ paylaşımına veya başparmak sürücüsüne kopyalayın.
kdnet.exe
VerifiedNICList.xml
Hedef bilgisayarda, Yönetici olarak bir Komut İstemi penceresi açın. Hedef bilgisayardaki NIC'nin desteklendiğini doğrulamak için bu komutu girin.
C:\KDNET>kdnet
Network debugging is supported on the following NICs:
busparams=0.25.0, Intel(R) 82579LM Gigabit Network Connection, KDNET is running on this NIC.kdnet.exe
- Konak sisteminin IP adresini ayarlamak için bu komutu yazın. Örnek çıktıda gösterilen 169.182.1.1 yerine kaydettiğiniz konak sisteminin gerçek IP adresini kullanın. Çalıştığınız her hedef/konak çifti için 50010 gibi benzersiz bir bağlantı noktası adresi seçin.
C:\>kdnet 169.182.1.1 50010
Enabling network debugging on Intel(R) 82577LM Gigabit Network Connection.
Key=2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
dbgsettingsdeğerlerinin düzgün ayarlandığını onaylamak için şu komutu girin:bcdedit /dbgsettingskey 2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p debugtype NET hostip 169.168.1.1 port 50000 dhcp Yes The operation completed successfully.Not
Güvenlik duvarından bir ileti alırsanız ve hata ayıklayıcısını kullanmak istiyorsanız, kutuların üçünü de seçin.
Ana bilgisayarda, Yönetici olarak bir Komut İstemi penceresi açın. Bu laboratuvar, Windows seti yüklemesi kapsamında yüklenen Windows Sürücü Seti'nden (WDK) WinDbg.exe x64 sürümünü kullanır. Varsayılan WinDbg dizinine geçin; varsayılan konum aşağıda gösterilir.
cd C:\Program Files(x86)\Windows Kits\10\Debuggers\x64Bu laboratuvar, her iki bilgisayarın da hedefte ve konakta Windows'un 64 bit sürümünü çalıştırdığını varsayar. Böyle bir durum söz konusu değilse en iyi yaklaşım, hedefte çalıştırılan araçların aynı bitlikte olanını ana bilgisayarda çalıştırmaktır. Örneğin, hedef 32 bit Windows çalıştırıyorsa konakta hata ayıklayıcının 32 bit sürümünü çalıştırın. Daha fazla bilgi için bkz. 32 Bit veya 64 Bit hata ayıklama araçlarını seçme.
Aşağıdaki komutu kullanarak uzak kullanıcı hata ayıklaması ile WinDbg'yi açın. Anahtar ve bağlantı noktası değerleri, hedef bilgisayarda BCDEdit kullanarak daha önce ayarladığınız değerlerle eşleşmektedir.
WinDbg –k net:port=50000,key=2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874pHedef sistemi yeniden başlatın.
Bir veya iki dakika içinde, ana bilgisayar sisteminde hata ayıklama çıktısı görüntülenmelidir.
Microsoft (R) Windows Debugger Version 10.0.17074.1002 AMD64 Copyright (c) Microsoft Corporation. All rights reserved. Using NET for debugging Opened WinSock 2.0 Waiting to reconnect... Connected to target 169.182.1.1 on port 50005 on local IP 169.182.1.2 You can get the target MAC address by running .kdtargetmac command. Connected to Windows 10 16299 x64 target at (Wed Feb 28 17:16:23.051 2018 (UTC - 8:00)), ptr64 TRUE Kernel Debugger connection established. (Initial Breakpoint requested) Symbol search path is: srv* Executable search path is: Windows 10 Kernel Version 16299 MP (4 procs) Free x64 Product: WinNt, suite: TerminalServer SingleUserTS Built by: 16299.15.amd64fre.rs3_release.170928-1534 Machine Name: Kernel base = 0xfffff800`9540d000 PsLoadedModuleList = 0xfffff800`95774110 Debug session time: Wed Feb 28 17:16:23.816 2018 (UTC - 8:00) System Uptime: 0 days 0:00:20.534
Hata Ayıklayıcı Komut penceresi, WinDbg'deki birincil hata ayıklama bilgileri penceresidir. Hata ayıklayıcı komutlarını girebilir ve komut çıkışını bu pencerede görüntüleyebilirsiniz.
Debugger Komut penceresi iki panele ayrılır. Pencerenin en altındaki komut girişi bölmesi olan daha küçük bölmeye komutları girin ve pencerenin en üstündeki daha büyük bölmede komut çıkışını görüntüleyin.
Komut girişi bölmesinde, komut geçmişinde gezinmek için Yukarı ok ve Aşağı ok tuşlarını kullanın. Bir komut görüntülendiğinde, komutu düzenleyebilir veya Enter tuşuna basarak komutu çalıştırabilirsiniz.
Çekirdek modu hata ayıklama komutları ve teknikleri
Bu bölümde, hedef sistem hakkındaki bilgileri görüntülemek için hata ayıklama komutlarını kullanın.
Bazı hata ayıklama komutları, daha fazla bilgi toplamak için seçebileceğiniz Hata Ayıklayıcı biçimlendirme dilini (DML) kullanarak metin görüntüler.
Konak sisteminde, hedef sistemde çalışmakta olan koda müdahale etmek için WinDBg'de Ctrl+Scroll Lock tuşlarını kullanın. Hedef sistemin yanıt vermesi biraz zaman alabilir.
Ana ekran, hata ayıklayıcıda canlı çekirdek bağlantısından Komut Penceresi çıkışını gösteriyor.
Hata Ayıklayıcı Komut penceresinde DML'yi etkinleştirmek için aşağıdaki komutu girin:
0: kd> .prefer_dml 1 DML versions of commands on by default.hhkomutunu kullanarak başvuru komutu yardımına erişebilirsiniz..prefer_dmliçin komut başvurusu yardımını görüntülemek için aşağıdaki komutu girin:0: kd> .hh .prefer_dmlHata Ayıklayıcı yardım dosyasında
.prefer_dmlkomutu için yardım görüntülenir.
Hedef sistemde ayrıntılı sürüm bilgilerini görüntülemek için WinDbg penceresinde vertarget (Hedef Bilgisayar Sürümünü Göster) komutunu girin:
0: kd> vertarget Windows 10 Kernel Version 9926 MP (4 procs) Free x64 Product: WinNt, suite: TerminalServer SingleUserTS Built by: 9926.0.amd64fre.fbl_awesome1501.150119-1648 Machine Name: "" Kernel base = 0xfffff801`8d283000 PsLoadedModuleList = 0xfffff801`8d58aef0 Debug session time: Fri Feb 20 10:15:17.807 2015 (UTC - 8:00) System Uptime: 0 days 01:31:58.931Doğru çekirdek modu işlemiyle çalıştığınızı doğrulamak için, yüklenen modülleri görüntülemek için WinDbg penceresinde lm (Yüklenen Modülleri Listele) komutunu girin:
0: Kd> lm start end module name fffff801`09200000 fffff801`0925f000 volmgrx (no symbols) fffff801`09261000 fffff801`092de000 mcupdate_GenuineIntel (no symbols) fffff801`092de000 fffff801`092ec000 werkernel (export symbols) werkernel.sys fffff801`092ec000 fffff801`0934d000 CLFS (export symbols) CLFS.SYS fffff801`0934d000 fffff801`0936f000 tm (export symbols) tm.sys fffff801`0936f000 fffff801`09384000 PSHED (export symbols) PSHED.dll fffff801`09384000 fffff801`0938e000 BOOTVID (export symbols) BOOTVID.dll fffff801`0938e000 fffff801`093f7000 spaceport (no symbols) fffff801`09400000 fffff801`094cf000 Wdf01000 (no symbols) fffff801`094d9000 fffff801`09561000 CI (export symbols) CI.dll ...Bu laboratuvarda atlanan içerik "..." ile gösterilir.
Belirli bir modül hakkında ayrıntılı bilgi istemek için
v(ayrıntılı) seçeneğini kullanın:0: Kd> lm v m tcpip Browse full module list start end module name fffff801`09eeb000 fffff801`0a157000 tcpip (no symbols) Loaded symbol image file: tcpip.sys Image path: \SystemRoot\System32\drivers\tcpip.sys Image name: tcpip.sys Browse all global symbols functions data Timestamp: Sun Nov 09 18:59:03 2014 (546029F7) CheckSum: 00263DB1 ImageSize: 0026C000 Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4 Unable to enumerate user-mode unloaded modules, Win32 error 0n30Ayarlanmış bir simge yolu ve yüklü simgeler olmadığından, hata ayıklayıcıda sınırlı bilgi sağlanır.
KMDF yankı sürücüsünü indirme ve derleme
Bu bölümde, KMDF yankı sürücüsünü indirip derleyin.
Genellikle WinDbg kullanırken kendi sürücü kodunuzla çalışıyor olursunuz. WinDbg işlemi hakkında bilgi sahibi olmak için bu laboratuvar KMDF Şablonu "Echo" örnek sürücüsünü kullanır. Kaynak kodu, WinDbg'de görüntülenen bilgileri anlamanıza yardımcı olmak için kullanılabilir. Bu örnek, yerel çekirdek modu kodunda tek adım adım nasıl ilerleyebileceğinizi göstermek için de kullanılır. Bu teknik, karmaşık çekirdek modu kod sorunlarının hatalarını ayıklamak için değerli olabilir.
GitHub'da yankı örneğini inceleyin.
Örnekle ilgili okuyun.
Echo örnek sürücüsünü indirmek ve oluşturmak için:
İlk olarak GitHub'dan KMDF Echo Örneği indirin ve ayıklayın.
KMDF Echo örneği genel klasöründe bulunur.
Sürücü örneklerini tek bir zip dosyasına indirin: Sürücü örnekleri
Zip dosyasını yerel sabit sürücünüze indirin.
Zip dosyasını seçip basılı tutun veya sağ tıklayın ve Tümünü Çıkartseçin. Yeni bir klasör belirtin veya ayıklanan dosyaları depolamak için var olan bir klasöre göz atın. Örneğin, dosyaların ayıklandığı yeni klasör olarak C:\DriverSamples\ belirtebilirsiniz.
Dosyalar ayıklandıktan sonra şu alt klasöre gidin: C:\DriverSamples\general\echo\kmdf
Microsoft Visual Studio'da
Dosya Proje/Çözüm Aç... seçin ve ayıklanan dosyaları içeren klasöre gidin( örneğin, C:\DriverSamples\general\echo\kmdf). kmdfecho çözüm dosyasına çift tıklayarak açın. Visual Studio'da Çözüm Gezgini'ni bulun. Bu pencere henüz açık değilse,
Görünüm menüsünden Çözüm Gezginiseçin. Çözüm Gezgini'nde üç projesi olan bir çözüm görebilirsiniz.
Numunenin yapılandırma seçeneklerini ve platformunu ayarlayın. Çözüm Gezgini'nde 'kmdfecho' (3 proje) çözümüseçin ve basılı tutun veya sağ tıklayın ve Configuration Manageröğesini seçin. Yapılandırma ve platform ayarlarının üç proje için aynı olduğundan emin olun. Varsayılan olarak, yapılandırma win10 hata ayıklama
olarak ayarlanır ve platform tüm projeler için win64 olarak ayarlanır. Bir proje için yapılandırma veya platform değişiklikleri yaparsanız, kalan üç proje için de aynı değişiklikleri yapın. Sürücü örneklerinin, mevcut sürücülerle örtüşmeyen değerleri kullanacak şekilde değiştirilmesi gerekir. Örnek Koddan Üretim Sürücüsüne - Windows'ta yüklü mevcut gerçek sürücülerle beraber var olacak benzersiz bir sürücü örneğinin nasıl oluşturulacağı konusunda bilgi için, numaralı örneklerde yapılması gerekenlere bakın.
Çalışma zamanı kitaplığını ayarlayın. Eko sürücüsü özellik sayfasını açın ve C/C++>Kod Oluşturma'ü bulun. Çalışma Zamanı Kitaplığı'nı Çok İş Parçacıklı Hata Ayıklama (/MTd) olarak değiştirin. Derleme seçenekleri hakkında daha fazla bilgi için bkz. /MD, /MT, /LD (Run-Time Kitaplığını Kullanma).
Sürücü özelliklerinde, Sürücü İmzalama>İmza Modu'ün Test İmzalamaolarak ayarlandığından emin olun.
Visual Studio'da Derle>Çözümü Derleöğesini seçin.
Derleme pencereleri, üç proje için de derlemenin başarılı olduğunu belirten bir ileti görüntülemelidir.
Bahşiş
Derleme hata iletisiyle karşılaşırsanız, bir düzeltme belirlemek için derleme hata numarasını kullanın. Örneğin, MSBuild hatası MSB8040, spectre riskini azaltılmış kitaplıklarla nasıl çalışıldığını açıklar.
Dosya Gezgini'nde, örneğin ayıklanan dosyalarını içeren klasöre gidin. Örneğin, daha önce belirttiğiniz klasör buysa C:\DriverSamples\general\echo\kmdfgidin. Bu klasör içinde, derlenen sürücü dosyalarının konumu Configuration Manager'da seçtiğiniz yapılandırma ve platform ayarlarına bağlı olarak değişir. Varsayılan ayarları değiştirmeden bıraktıysanız, derlenen sürücü dosyaları 64 bit hata ayıklama derlemesi için \x64\Debug adlı bir klasöre kaydedilir.
Autosync sürücüsü için oluşturulan dosyaları içeren klasöre gidin: C:\DriverSamples\general\echo\kmdf\driver\AutoSync\x64\Debug.
Klasör şu dosyaları içermelidir:
Dosya Açıklama Echo.sys Sürücü dosyası. Echo.inf Sürücüyü yüklemek için gereken bilgileri içeren bir bilgi (INF) dosyası. Ayrıca, echoapp.exe dosyası oluşturulmuş ve burada bulunmalıdır: C:\DriverSamples\general\echo\kmdf\exe\x64\Debug.
Dosya Açıklama EchoApp.exe echo.sys sürücüsüyle iletişim kuran bir Komut İstemi yürütülebilir test dosyası. Yerleşik sürücü dosyalarını ve EchoApp test uygulamasını ana bilgisayardan hedef sisteme kopyalamak için bir USB belleği bulun veya bir ağ paylaşımı ayarlayın.
Sonraki bölümde, kodu hedef sisteme kopyalayın ve sürücüyü yükleyip test edin.
Hedef sisteme KMDF yankı sürücüsü örneğini yükleme
Bu bölümde, yankı örnek sürücüsünü yüklemek için DevCon aracını kullanın.
Sürücüyü yüklediğiniz bilgisayara hedef bilgisayar veya sınama bilgisayarıdenir. Bu bilgisayar genellikle sürücü paketini geliştirip oluşturduğunuz bilgisayardan ayrıdır. Sürücüyü geliştirip oluşturduğunuz bilgisayara
Sürücü paketini hedef bilgisayara taşıma ve sürücüyü yükleme işlemine, sürücü dağıtma
Test imzalı bir sürücü dağıtmadan önce, test imzalamayı etkinleştirerek hedef bilgisayarı hazırlayın. Ayrıca WDK yüklemenizde DevCon aracını bulmanız ve bunu hedef sisteme kopyalamanız gerekir.
Sürücüyü hedef sisteme yüklemek için aşağıdaki adımları uygulayın.
Hedef sistemde, test imzalı sürücüleri etkinleştirin:
Windows Ayarlarıaçın.
Güncelleştirme ve Güvenlikbölümünde Kurtarmaseçeneğini seçin.
Gelişmiş Başlangıç altında, Şimdi Yeniden Başlat'ı seçin.
Bilgisayar yeniden başlatıldığında başlangıç seçenekleri
seçin. Windows 11'deGelişmiş seçeneklerin>Sorunlarını Giderme>Başlangıç Ayarları'nı ve ardından Yeniden Başlat'ı seçin. F7 tuşuna basarak Sürücü imzası zorlamayı devre dışı bırakma seçeneğini seçin.
Hedef bilgisayarı yeniden başlatın.
Konak sisteminde, WDK yüklemenizde Araçları klasörüne gidin ve DevCon aracını bulun. Örneğin, şu klasöre bakın: C:\Program Files (x86)\Windows Kits\10\Tools\x64\devcon.exe.
Oluşturulan sürücü paketinin hedefinde bir klasör oluşturun; örneğin, C:\EchoDriver
Hedef bilgisayarda sertifika dosyasını seçip basılı tutun veya sağ tıklayın ve yükle'yi seçin ve ardından sınama sertifikasını yüklemek için istemleri izleyin.
Hedef bilgisayarı ayarlamak için daha ayrıntılı yönergelere ihtiyacınız varsa bkz. Bilgisayarı el ile sürücü dağıtımı için hazırlama.
Aşağıdaki yönergelerde örnek sürücüyü yükleme ve test etme adımları gösterilmektedir. Sürücüyü yüklemek için kullandığınız devcon aracının genel söz dizimi aşağıdadır:
devcon install <INF file> <hardware ID>
Bu sürücüyü yüklemek için gereken INF dosyası echo.inf. Inf dosyası, echo.sysyüklemek için donanım kimliğini içerir. Yankı örneği için donanım kimliği root\ECHO.
Hedef bilgisayarda, Yönetici olarak bir Komut İstemi penceresi açın. Sürücü paketi klasörünüze gidin ve aşağıdaki komutu girin:
devcon install echo.inf root\ECHO
devcon'in tanınmadığı belirtilen bir hata iletisi alırsanız, devcon aracının yolunu eklemeyi deneyin. Örneğin, C:\Toolsadlı bir klasöre kopyaladıysanız aşağıdaki komutu kullanmayı deneyin:
c:\tools\devcon install echo.inf root\ECHO
Test sürücüsünün imzasız bir sürücü olduğunu belirten bir iletişim kutusu görüntülenir. Devam etmek için yine de bu sürücüyü yükle seçeneğini belirleyin .
Bahşiş
Yüklemeyle ilgili herhangi bir sorun yaşıyorsanız daha fazla bilgi için aşağıdaki dosyaya bakın. %windir%\inf\setupapi.dev.log
Örnek sürücüyü başarıyla yükledikten sonra test etmeye hazırsınız demektir.
Hedef bilgisayardaki Komut İstemi penceresinde, Cihaz Yöneticisi'ni açmak için devmgmt
Test yankı uygulamasını başlatmak ve sürücünün işlevsel olduğunu onaylamak için echoapp girin.
C:\Samples\KMDF_Echo_Sample> echoapp
DevicePath: \\?\root#sample#0005#{cdc35b6e-0be4-4936-bf5f-5537380a7c1a}
Opened device successfully
512 Pattern Bytes Written successfully
512 Pattern Bytes Read successfully
Pattern Verified successfully
30720 Pattern Bytes Written successfully
30720 Pattern Bytes Read successfully
Pattern Verified successfully
Sürücü hakkındaki bilgileri görüntülemek için WinDbg kullanma
Bu bölümde, sembol yolunu ayarlayın ve KMDF yankı örnek sürücüsü hakkındaki bilgileri görüntülemek için çekirdek hata ayıklayıcısı komutlarını kullanın.
Sürücü hakkındaki bilgileri görüntülemek için:
Konak sisteminde, hata ayıklayıcıyı kapattıysanız, yönetici Komut İstemi penceresinde aşağıdaki komutu kullanarak yeniden açın.
WinDbg -k net:port=50000,key=2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874pHedef sistemde çalışan kodda kesinti yapmak için Ctrl+Break (Scroll Lock) tuşlarını kullanın.
WinDbg ortamında Microsoft sembol sunucusunun sembol yolunu ayarlamak için
.symfixkomutunu kullanın.0: kd> .symfixYerel simgelerinizi kullanmak üzere yerel simge konumunuzu eklemek için,
.sympath+kullanarak yolu ekleyin ve ardından.reload /f.0: kd> .sympath+ C:\DriverSamples\general\echo\kmdf 0: kd> .reload /f.reloadzorla seçeneğine sahip/fkomutu, belirtilen modül için tüm sembol bilgilerini siler ve simgeleri yeniden yükler. Bazı durumlarda, bu komut modülün kendisini de yeniden yükler veya kaldırır.
WinDbg'nin sağladığı gelişmiş işlevleri kullanmak için uygun simgeleri yüklemeniz gerekir. Simgeleriniz düzgün yapılandırılmadıysa, sembollere bağımlı işlevleri kullanmayı denediğinizde, simgelerin kullanılamadığını belirten iletiler alırsınız.
0:000> dv
Unable to enumerate locals, HRESULT 0x80004005
Private symbols (symbols.pri) are required for locals.
Type “.hh dbgerr005” for details.
Simgelerle çalışmak için kullanılabilecek birçok yaklaşım vardır. Birçok durumda, bilgisayarı Microsoft'un ihtiyaç duyulduğunda sağladığı bir sembol sunucusundan sembollere erişecek şekilde yapılandırabilirsiniz. Bu laboratuvarda bu yaklaşım kullanılır. Ortamınızdaki simgeler farklı bir konumdaysa, bu konumu kullanmak için adımları değiştirin. Daha fazla bilgi için bkz. Windows hata ayıklayıcısı için sembol yolu.
Kaynak hata ayıklaması gerçekleştirmek için, ikili dosyalarınızın denetimli (hata ayıklama) bir sürümünü oluşturmanız gerekir. Derleyici sembol dosyaları (.pdb dosyaları) oluşturur. Bu sembol dosyaları, hata ayıklayıcıya ikili talimatların kaynak kod satırlarına nasıl karşılık geldiğini gösterir. Gerçek kaynak dosyaların da hata ayıklayıcı tarafından erişilebilir olması gerekir.
Sembol dosyaları kaynak kodun metnini içermez. Hata ayıklama için en iyisi bağlayıcının kodunuzu iyileştirmemesidir. Kaynak hata ayıklama ve yerel değişkenlere erişim daha zordur ve kod iyileştirilmişse bazen neredeyse imkansızdır. Yerel değişkenleri veya kaynak satırları görüntülerken sorun yaşıyorsanız aşağıdaki derleme seçeneklerini ayarlayın:
set COMPILE_DEBUG=1
set ENABLE_OPTIMIZER=0
Yankı sürücüsü hakkındaki bilgileri görüntülemek için hata ayıklayıcının komut alanına aşağıdaki komutu girin:
0: kd> lm m echo* v Browse full module list start end module name fffff801`4ae80000 fffff801`4ae89000 ECHO (private pdb symbols) C:\Samples\KMDF_ECHO_SAMPLE\echo.pdb Loaded symbol image file: ECHO.sys Image path: \SystemRoot\system32\DRIVERS\ECHO.sys Image name: ECHO.sys ...Daha fazla bilgi için bkz. lm.
Bu laboratuvar seti daha önce
prefer_dmlolarak ayarlandığı için, çıkışın bazı öğeleri seçebileceğiniz tıklanabilir bağlantılardır. "a" harfiyle başlayan öge simgeleri hakkında bilgi görüntülemek için hata ayıklama çıktısında Tüm genel simgelere göz at bağlantısını seçin.0: kd> x /D Echo!a*Yankı örneği "a" harfiyle başlayan herhangi bir simge içermez, bu nedenle "Yankı" ile başlayan yankı sürücüsüyle ilişkili tüm simgeler hakkındaki bilgileri görüntülemek için
x ECHO!Echo*yazın.0: kd> x ECHO!Echo* fffff801`0bf95690 ECHO!EchoEvtIoQueueContextDestroy (void *) fffff801`0bf95000 ECHO!EchoEvtDeviceSelfManagedIoStart (struct WDFDEVICE__ *) fffff801`0bf95ac0 ECHO!EchoEvtTimerFunc (struct WDFTIMER__ *) fffff801`0bf9b120 ECHO!EchoEvtDeviceSelfManagedIoSuspend (struct WDFDEVICE__ *) ...Daha fazla bilgi için bkz. x (Simgeleri İnceleme).
!lmiuzantısı bir modülle ilgili ayrıntılı bilgileri görüntüler.!lmi echogirin. Çıktınız bu örnekte gösterilen metne benzer olmalıdır:0: kd> !lmi echo Loaded Module Info: [echo] Module: ECHO Base Address: fffff8010bf94000 Image Name: ECHO.sys …Bu örnekte gösterildiği gibi üst bilgi bilgilerini görüntülemek için
!dhuzantısını kullanın:0: kd> !dh echo File Type: EXECUTABLE IMAGE FILE HEADER VALUES 14C machine (i386) 6 number of sections 54AD8A42 time date stamp Wed Jan 07 11:34:26 2015 ...Hedef sistemdeki tüm hata ayıklama iletilerinin hata ayıklayıcıda görüntülenmesi için varsayılan hata ayıklama bit maskesini değiştirmek için aşağıdakileri girin:
0: kd> ed nt!Kd_DEFAULT_MASK 0xFFFFFFFF0xFFFFFFFF maskesi kullanıldığında bazı sürücüler ek bilgiler görüntüler. Görüntülenen bilgi miktarını azaltmak istiyorsanız maskeyi 0x00000000 olarak ayarlayın.
0: kd> ed nt!Kd_DEFAULT_MASK 0x00000000Maskenin tüm hata ayıklayıcı iletilerini görüntüleyecek şekilde ayarlandığını onaylamak için
ddkomutunu kullanın.0: kd> dd nt!kd_DEFAULT_MASK fffff802`bb4057c0 ffffffff 00000000 00000000 00000000 fffff802`bb4057d0 00000000 00000000 00000000 00000000 fffff802`bb4057e0 00000001 00000000 00000000 00000000 fffff802`bb4057f0 00000000 00000000 00000000 00000000 fffff802`bb405800 00000000 00000000 00000000 00000000 fffff802`bb405810 00000000 00000000 00000000 00000000 fffff802`bb405820 00000000 00000000 00000000 00000000 fffff802`bb405830 00000000 00000000 00000000 00000000
Tak Çalıştır cihaz ağacı bilgilerini görüntüleme
Bu bölümde, yankı örnek aygıt sürücüsü ve Tak ve Çalıştır cihaz ağacında nerede bulunduğu hakkındaki bilgileri gösterin.
Tak ve Kullan cihaz ağacındaki cihaz sürücüsü hakkındaki bilgiler sorun giderme için yararlı olabilir. Örneğin, cihaz sürücüsü cihaz ağacında yerleşik değilse, cihaz sürücüsünün yüklenmesiyle ilgili bir sorun olabilir.
Cihaz düğümü hata ayıklama uzantısı hakkında daha fazla bilgi için bkz. !devnode.
Konak sisteminde Tak ve Kullan cihaz ağacındaki tüm cihaz düğümlerini görmek için
!devnode 0 1komutunu girin.0: kd> !devnode 0 1 Dumping IopRootDeviceNode (= 0xffffe0005a3a8d30) DevNode 0xffffe0005a3a8d30 for PDO 0xffffe0005a3a9e50 InstancePath is "HTREE\ROOT\0" State = DeviceNodeStarted (0x308) Previous State = DeviceNodeEnumerateCompletion (0x30d) DevNode 0xffffe0005a3a3d30 for PDO 0xffffe0005a3a4e50 InstancePath is "ROOT\volmgr\0000" ServiceName is "volmgr" State = DeviceNodeStarted (0x308) Previous State = DeviceNodeEnumerateCompletion (0x30d) DevNode 0xffffe0005a324560 for PDO 0xffffe0005bd95ca0… …Cihaz sürücüsünün adını aramak için oluşturulan çıktıda arama yapmak için Ctrl+F tuşlarını kullanın echo.
Yankı cihazı sürücüsü yüklenmelidir. Bu örnekte gösterildiği gibi echo cihaz sürücünüzle ilişkili Tak Çalıştır bilgilerini görüntülemek için
!devnode 0 1 echokomutunu kullanın:0: Kd> !devnode 0 1 echo Dumping IopRootDeviceNode (= 0xffffe0007b725d30) DevNode 0xffffe0007b71a630 for PDO 0xffffe0007b71a960 InstancePath is "ROOT\SAMPLE\0000" ServiceName is "ECHO" State = DeviceNodeStarted (0x308) Previous State = DeviceNodeEnumerateCompletion (0x30d) …Önceki komutta görüntülenen çıktı, sürücünüzün çalışan örneğiyle ilişkilendirilmiş PDO'ları içerir, bu örnekte 0xffffe0007b71a960. Echo cihaz sürücüsüyle ilişkili Tak ve Çalıştır bilgilerini görüntülemek için
!devobj <PDO address>komutunu girin.!devnode'ın bilgisayarınızda gösterdiği PDO adresini kullanın, burada gösterileni değil.0: kd> !devobj 0xffffe0007b71a960 Device object (ffffe0007b71a960) is for: 0000000e \Driver\PnpManager DriverObject ffffe0007b727e60 Current Irp 00000000 RefCount 0 Type 00000004 Flags 00001040 Dacl ffffc102c9b36031 DevExt 00000000 DevObjExt ffffe0007b71aab0 DevNode ffffe0007b71a630 ExtensionFlags (0x00000800) DOE_DEFAULT_SD_PRESENT Characteristics (0x00000180) FILE_AUTOGENERATED_DEVICE_NAME, FILE_DEVICE_SECURE_OPEN AttachedDevice (Upper) ffffe000801fee20 \Driver\ECHO Device queue is not busy.!devnode 0 1komutunda görüntülenen çıktı, sürücünüzün çalışan örneğiyle ilişkilendirilmiş PDO adresini içerir; bu örnekte 0xffffe0007b71a960. Cihaz sürücüsüyle ilişkili Tak çalıştır bilgilerini görüntülemek için!devstack <PDO address>komutunu girin.!devnodebilgisayarınızda görüntülenen PDO adresini kullanın, bu örnekte gösterilen adresi kullanmayın.0: kd> !devstack 0xffffe0007b71a960 !DevObj !DrvObj !DevExt ObjectName ffffe000801fee20 \Driver\ECHO ffffe0007f72eff0 > ffffe0007b71a960 \Driver\PnpManager 00000000 0000000e !DevNode ffffe0007b71a630 : DeviceInst is "ROOT\SAMPLE\0000" ServiceName is "ECHO"
Çıktı, oldukça basit bir cihaz sürücü yığınına sahip olduğunuzu gösterir. Yankı sürücüsü, PnPManager düğümünün alt öğesidir. PnPManager bir kök düğümdür.
\Driver\ECHO
\Driver\PnpManager
Bu diyagramda daha karmaşık bir cihaz düğümü ağacı gösterilmektedir.
Daha karmaşık sürücü yığınları hakkında daha fazla bilgi için bkz. Sürücü yığınları ve Cihaz düğümleri ve cihaz yığınları.
Kesme noktaları ve kaynak koduyla çalışmak
Bu bölümde, çekirdek modu kaynak kodunda kesme noktalarını belirleyin ve adım adım ilerleyin.
Kodda adım adım ilerleyebilmek ve değişkenlerin değerlerini gerçek zamanlı olarak denetleyebilmek için kesme noktalarını etkinleştirin ve kaynak kodun yolunu ayarlayın.
Kesme noktaları belirli bir kod satırında kod yürütmeyi durdurur. Kodun belirli bir bölümünde hata ayıklamak için bu noktadan kodda ileri doğru ilerleyin.
Hata ayıklama komutu kullanarak kesme noktası ayarlamak için aşağıdaki b komutlarından birini kullanın.
| Komut | Açıklama |
|---|---|
bp |
içinde yer alan modül kaldırılana kadar etkin olan bir kesme noktası ayarlar. |
bu |
Modül kaldırıldığında çözümlenemeyen ve modül yeniden yüklendiğinde yeniden etkinleşen bir kesme noktası ayarlar. |
bm |
Simge için bir kesme noktası ayarlar. Bu komut bu veya bp uygun şekilde kullanır ve bir sınıftaki tüm yöntemler gibi eşleşen her simgede kesme noktaları ayarlamak için joker karakterlerin (*) kullanılmasına izin verir. |
Daha fazla bilgi için bkz. WinDbgkaynak kodunda hata ayıklama.
Konak sisteminde, geçerli WinDbg oturumunda Hata Ayıklama>Kaynak Modu etkinleştirildiğini onaylamak için WinDbg kullanıcı arabirimini kullanın.
Yerel kod konumunuzu kaynak yola eklemek için aşağıdaki komutu girin:
.srcpath+ C:\DriverSamples\KMDF_Echo_Sample\driver\AutoSyncSimge yoluna yerel simge konumunuzu eklemek için aşağıdaki komutu girin:
.sympath+ C:\DriverSamples\KMDF_Echo_Sample\driver\AutoSyncKesme noktası için kullanılacak işlev adını belirlemek üzere yankı sürücüsüyle ilişkili simgeleri incelemek için
xkomutunu kullanın.DeviceAddişlev adını bulmak için joker karakter veya Ctrl+F kullanabilirsiniz.0: kd> x ECHO!EchoEvt* 8b4c7490 ECHO!EchoEvtIoQueueContextDestroy (void *) 8b4c7000 ECHO!EchoEvtDeviceSelfManagedIoStart (struct WDFDEVICE__ *) 8b4c7820 ECHO!EchoEvtTimerFunc (struct WDFTIMER__ *) 8b4cb0e0 ECHO!EchoEvtDeviceSelfManagedIoSuspend (struct WDFDEVICE__ *) 8b4c75d0 ECHO!EchoEvtIoWrite (struct WDFQUEUE__ *, struct WDFREQUEST__ *, unsigned int) 8b4cb170 ECHO!EchoEvtDeviceAdd (struct WDFDRIVER__ *, struct …Çıkış, yankı sürücünüz için
DeviceAddyöntemininECHO!EchoEvtDeviceAddolduğunu gösterir.Alternatif olarak, kesme noktanızın işlev adını bulmak için kaynak kodu gözden geçirin.
Kesme noktasını
bmkomutuyla ayarlamak için sürücünün adını ve ardından işlev adını (örneğin, kesme noktasını ünlem işaretiyle ayırarak ayarlamak istediğinizAddDevice) ayarlayın. Bu laboratuvar, yüklenen sürücüyü izlemek içinAddDevicekullanır.0: kd> bm ECHO!EchoEvtDeviceAdd 1: fffff801`0bf9b1c0 @!"ECHO!EchoEvtDeviceAdd"<module>!<symbol>,<class>::<method>,'<file.cpp>:<line number>'gibi değişkenleri ayarlamayla birlikte farklı söz dizimi kullanabilir veya<condition> <#>birkaç kez atlayabilirsiniz. Daha fazla bilgi için bkz. WinDbg'de koşullu kesme noktaları ve diğer Windows hata ayıklayıcıları.blkomutunu girerek kesme noktasının ayarlandığını onaylamak için geçerli kesme noktalarını listeleyin:0: kd> bl 1 e fffff801`0bf9b1c0 0001 (0001) ECHO!EchoEvtDeviceAddBurada gösterilen çıkıştaki "e", 1 numaralı kesme noktasının tetiklenmek üzere etkinleştirildiğini gösterir.
g(go) komutunu girerek hedef sistemde kod yürütmeyi yeniden başlatın.Hedef sistemdeki Windows'ta, Cihaz Yöneticisi açmak için simgeyi kullanarak veya mmc devmgmt.mscyazarak işlemi gerçekleştirin. Cihaz Yöneticisi'nde Örnekler düğümünü genişletin.
KMDF yankı sürücüsü girdisini seçip basılı tutun veya sağ tıklayın ve menüden devre dışı bırak'ı seçin.
KMDF yankı sürücüsü girişini yeniden seçip basılı tutun veya sağ tıklayın ve menüden etkinleştir'i seçin.
Konak sisteminde, sürücü etkinleştirildiğinde AddDevice hata ayıklama kesme noktası çalışmalıdır. Hedef sistemde sürücü kodunun yürütülmesi durdurulmalıdır. Kesme noktasına isabet edildiğinde yürütme, AddDevice yordamının başında durdurulmalıdır. Hata ayıklama komutu çıkışı
Breakpoint 1 hit’i gösterir.
pkomutunu girerek veya AddDevice yordamının aşağıdaki sonuna ulaşana kadar F10 tuşuna basarak kod satırında adım adım ilerleyin. Ayraç karakteri (}) gösterildiği gibi vurgulanır.
Sonraki bölümde DeviceAdd kodu yürütüldükten sonra değişkenlerin durumunu inceleyin.
Aşağıdaki komutları kullanarak var olan kesme noktalarını değiştirebilirsiniz:
| Komut | Açıklama |
|---|---|
bl |
Kesme noktalarını listeler. |
bc |
Listeden bir kesme noktasını temizler. Tüm kesme noktalarını temizlemek için bc * kullanın. |
bd |
Kesme noktasını devre dışı bırakır. Tüm kesme noktalarını devre dışı bırakmak için bd * kullanın. |
be |
Kesme noktasını etkinleştirir. Tüm kesme noktalarını etkinleştirmek için be * kullanın. |
Alternatif olarak, WinDbg kullanıcı arabirimindeki kesme noktalarını da değiştirebilirsiniz.
Bir bellek konumuna erişildiğinde tetiklenen kesme noktalarını da ayarlayabilirsiniz. aşağıdaki söz dizimi ile ba (erişimde kesme) komutunu kullanın:
ba <access> <size> <address> {options}
| Seçenek | Açıklama |
|---|---|
e |
CPU, adresten bir yönerge getirirken işleme koyar |
r |
okuma/yazma: CPU adresi okuduğunda veya adrese yazdığında |
w |
yazma: CPU adrese yazdığında |
Herhangi bir zamanda yalnızca dört veri kesme noktası ayarlayabilirsiniz. Kesme noktasını tetikleme amacıyla verilerinizi doğru şekilde hizaladığınızdan emin olmak size bağlıdır. Sözcükler 2 ile bölünebilen adreslerle bitmelidir, dword'lar 4, dört sözcük 0 veya 8 ile bölünmelidir.
Örneğin, belirli bir bellek adresinde okuma/yazma kesme noktası ayarlamak için bu örneğe benzer bir komut kullanabilirsiniz.
ba r 4 0x0003f7bf0
Aşağıdaki komutları kullanarak, parantez içinde gösterilen ilişkili klavye kısa kesimleriyle kodunuzda adım adım ilerleyebilirsiniz.
- Kes (Ctrl+Break). Bu komut, sistem çalıştığı ve WinDbg ile iletişimde olduğu sürece sistemi kesintiye uğratır. Çekirdek Hata Ayıklayıcısı'ndaki sıra Ctrl+C'dir.
- İmlece kadar çalıştır (F7 veya Ctrl+F10). İmleci yürütmenin kesmesini istediğiniz bir kaynak veya ayrıştırma penceresine getirin ve F7 tuşuna basın. Kod yürütme bu noktaya kadar çalışır. Kod yürütme akışı imleç tarafından belirtilen noktaya ulaşmazsa WinDbg kırılmaz. If deyimi yürütülmezse bu durum oluşabilir.
- (F5) komutunu çalıştırın. Bir kesme noktasıyla karşılaşılana veya hata denetimi gibi bir olay gerçekleşene kadar çalıştırın.
- Üzerine adımla (F10). Bu komut, kod yürütmenin tek seferde bir deyim veya yönergeyle devam etmesine neden olur. Bir çağrıyla karşılaşılırsa, kod yürütme çağrılan rutini girmeden çağrıyı atlar. Programlama dili C veya C++ ise ve WinDbg kaynak modundaysa, kaynak modu Hata Ayıklama>Kaynak Modukullanılarak açılabilir veya kapatılabilir.
- Adım atın (F11). Bu komut, adım atma gibidir; ancak bir çağrının yürütülmesi, çağrılan yordama girer.
- Dışarı çıkın (Shift+F11). Bu komut, yürütmenin çağrı yığınındaki geçerli rutin veya geçerli yerde çalışmasına ve bu rutin veya yerden çıkmasına neden olur. Bu komut, rutinle yeterince haşır neşir olduysanız kullanışlıdır.
Daha fazla bilgi için bkz. WinDbgkaynak kodunda hata ayıklama.
Değişkenleri ve çağrı yığınlarını görüntüleme
Bu bölümde değişkenler ve çağrı yığınları hakkındaki bilgileri görüntüleyin.
Bu laboratuvarda, daha önce açıklanan işlemi kullanarak AddDevice rutininde durdurulduğunuz varsayılır. Burada gösterilen çıkışı görüntülemek için, gerekirse daha önce açıklanan adımları yineleyin.
Konak sisteminde değişkenleri görüntülemek için, yerel değişkenleri görüntülemek amacıyla görünüm>yerel menü öğesini kullanın.
Genel değişken adresinin konumunu bulmak için ? <variable name>girin.
- Step Out (Shift+F11) – Bu komut, yürütmeyi geçerli alt programın (çağrı yığınındaki mevcut yer) tamamlanıp çıkılmasını sağlar. Rutini yeterince gördüyseniz bu faydalıdır.
Daha fazla bilgi için hata ayıklama başvuru belgelerindeki WinDbg (Klasik) Kaynak Kodu Hata Ayıklama bölümüne bakın.
Bölüm 8: Değişkenleri ve çağrı yığınlarını görüntüleme
Bölüm 8'de değişkenler ve çağrı yığınları hakkındaki bilgileri görüntüleyeceksiniz.
Bu laboratuvarda, daha önce açıklanan işlem kullanılarak AddDevice rutininde durdurulduğunuz varsayılır. Çıktıyı burada görüntülemek için, gerekirse daha önce açıklanan adımları yineleyin.
<- Konak sisteminde
Değişkenleri görüntüleme
Yerel değişkenleri görüntülemek için görünüm>yerel menü öğesini kullanın.
Genel değişkenler
yazarak, <değişken adını>, bir genel değişken adresinin konumunu bulabilirsiniz.
Yerel değişkenler
dv komutunu yazarak belirli bir çerçeve için tüm yerel değişkenlerin adlarını ve değerlerini görüntüleyebilirsiniz.
Belirli bir çerçevenin tüm yerel değişkenlerinin adlarını ve değerlerini görüntülemek için dv komutunu girin:
0: kd> dv
Driver = 0x00001fff`7ff9c838
DeviceInit = 0xffffd001`51978190
status = 0n0
Çağrı yığını, program sayacının geçerli konumuna yol açan işlev çağrıları zinciridir. Çağrı yığınındaki en üstteki işlev geçerli işlevdir ve sonraki işlev geçerli işlevi çağıran işlevdir, vb.
Çağrı yığınını görüntülemek için k* komutlarını kullanın.
| Komut | Açıklama |
|---|---|
kb |
Yığını ve ilk üç parametreyi görüntüler. |
kp |
Yığınları ve parametrelerin tam listesini görüntüler. |
kn |
Çerçeve bilgileriyle birlikte yığını görmenizi sağlar. |
Ana sistemde, çağrı yığınını kullanılabilir tutmak istiyorsanız, onu görüntülemek için görünüm>çağrı yığını'ü seçin. Ek bilgilerin görüntülenmesini değiştirmek için pencerenin üst kısmındaki sütunları seçin.
Örnek bağdaştırıcı kodunda hata ayıklarken, duraklama durumundayken çağrı yığınını göstermek için
knkomutunu kullanın.3: kd> kn # Child-SP RetAddr Call Site 00 ffffd001`51978110 fffff801`0942f55b ECHO!EchoEvtDeviceAdd+0x66 [c:\Samples\kmdf echo sample\c++\driver\autosync\driver.c @ 138] 01 (Inline Function) --------`-------- Wdf01000!FxDriverDeviceAdd::Invoke+0x30 [d:\wbrtm\minkernel\wdf\framework\shared\inc\private\common\fxdrivercallbacks.hpp @ 61] 02 ffffd001`51978150 fffff801`eed8097d Wdf01000!FxDriver::AddDevice+0xab [d:\wbrtm\minkernel\wdf\framework\shared\core\km\fxdriverkm.cpp @ 72] 03 ffffd001`51978570 fffff801`ef129423 nt!PpvUtilCallAddDevice+0x35 [d:\9142\minkernel\ntos\io\pnpmgr\verifier.c @ 104] 04 ffffd001`519785b0 fffff801`ef0c4112 nt!PnpCallAddDevice+0x63 [d:\9142\minkernel\ntos\io\pnpmgr\enum.c @ 7397] 05 ffffd001`51978630 fffff801`ef0c344f nt!PipCallDriverAddDevice+0x6e2 [d:\9142\minkernel\ntos\io\pnpmgr\enum.c @ 3390] ...
Çekirdek (nt), Tak ve Kullan kodunu (PnP) çağırdı, PnP ise sürücü çerçeve kodunu (WDF) çağırdı, ve ardından WDF, echo sürücüsü DeviceAdd fonksiyonunu çağırdı.
İşlemleri ve iş parçacıklarını görüntüleme
Bu bölümde, çekirdek modunda çalışan işlemler ve iş parçacıkları hakkındaki bilgileri görüntüleyin.
Süreç
!process hata ayıklayıcısı uzantısını kullanarak işlem bilgilerini görüntüleyebilir veya ayarlayabilirsiniz. Bir ses çalındığında kullanılan işlemi incelemek için bir kesme noktası ayarlayın.
Konak sisteminde,
dvyordamıyla ilişkili yerel ayar değişkenlerini incelemek içinEchoEvtIokomutunu girin:0: kd> dv ECHO!EchoEvtIo* ECHO!EchoEvtIoQueueContextDestroy ECHO!EchoEvtIoWrite ECHO!EchoEvtIoReadbc *kullanarak önceki kesme noktalarını temizleyin:0: kd> bc *Aşağıdaki komutu kullanarak
EchoEvtIoyordamlarında bir sembol kesme noktası ayarlayın:0: kd> bm ECHO!EchoEvtIo* 2: aade5490 @!”ECHO!EchoEvtIoQueueContextDestroy” 3: aade55d0 @!”ECHO!EchoEvtIoWrite” 4: aade54c0 @!”ECHO!EchoEvtIoRead”Kesme noktasının düzgün ayarlandığını onaylamak için kesme noktalarını listeleyin:
0: kd> bl 1 e aabf0490 [c:\Samples\kmdf echo sample\c++\driver\autosync\queue.c @ 197] 0001 (0001) ECHO!EchoEvtIoQueueContextDestroy ...Kod yürütmeyi yeniden başlatmak için
ggirin:0: kd> gHedef sistemde, hedef sistemde
EchoApp.exesürücü test programını çalıştırın.Host sistemde, test uygulaması çalıştırıldığında, sürücüdeki G/Ç rutini çağrılır. Bu çağrı kesme noktasını tetikler ve hedef sistemdeki sürücü kodunun yürütülmesi durdurulur.
Breakpoint 2 hit ECHO!EchoEvtIoWrite: fffff801`0bf95810 4c89442418 mov qword ptr [rsp+18h],r8!processçalıştırmakla ilgili geçerli işlemi görüntülemek için komutunu kullanın:0: kd> !process PROCESS ffffe0007e6a7780 SessionId: 1 Cid: 03c4 Peb: 7ff7cfec4000 ParentCid: 0f34 DirBase: 1efd1b000 ObjectTable: ffffc001d77978c0 HandleCount: 34. Image: echoapp.exe VadRoot ffffe000802c79f0 Vads 30 Clone 0 Private 135. Modified 5. Locked 0. DeviceMap ffffc001d83c6e80 Token ffffc001cf270050 ElapsedTime 00:00:00.052 UserTime 00:00:00.000 KernelTime 00:00:00.000 QuotaPoolUsage[PagedPool] 33824 QuotaPoolUsage[NonPagedPool] 4464 Working Set Sizes (now,min,max) (682, 50, 345) (2728KB, 200KB, 1380KB) PeakWorkingSetSize 652 VirtualSize 16 Mb PeakVirtualSize 16 Mb PageFaultCount 688 MemoryPriority BACKGROUND BasePriority 8 CommitCharge 138 THREAD ffffe00080e32080 Cid 03c4.0ec0 Teb: 00007ff7cfece000 Win32Thread: 0000000000000000 RUNNING on processor 1Çıkış, işlemin sürücü yazma olayındaki kesme noktanıza isabet edildiğinde çalışan echoapp.exe iş parçacığıyla ilişkili olduğunu gösterir. Daha fazla bilgi için bkz. !process.
Tüm işlemlerin özet bilgilerini görüntülemek için
!process 0 0kullanın. Çıktıda, echoapp.exe görüntüsüyle ilişkili işlemin aynı işlem adresini bulmak için Ctrl+F tuşlarını kullanın. Örnekte işlem adresiffffe0007e6a7780.... PROCESS ffffe0007e6a7780 SessionId: 1 Cid: 0f68 Peb: 7ff7cfe7a000 ParentCid: 0f34 DirBase: 1f7fb9000 ObjectTable: ffffc001cec82780 HandleCount: 34. Image: echoapp.exe ...Bu laboratuvarın ilerleyen bölümlerinde kullanmak üzere echoapp.exe ile ilişkili işlem kimliğini kaydedin. Adresi daha sonra kullanmak üzere kopyalama arabelleğine kopyalamak için Ctrl+C tuşlarını da kullanabilirsiniz.
_____________________________________________________(echoapp.exe işlem adresi)
Kodu ileri yürütebilmek için gerektiği gibi
g'ı hata ayıklayıcıya girin ve echoapp.exe çalışana kadar ilerletin. Okuma ve yazma olayında kesme noktasına defalarca ulaşır. echoapp.exe tamamlandığında, Ctrl+ScrLk (Ctrl+Break) tuşlarına basarak hata ayıklayıcıya girin.Farklı bir işlem çalıştırdığınızı onaylamak için
!processkomutunu kullanın. Burada gösterilen çıktıda, System Görüntü değerine sahip işlem, Echo Görüntü değerinden farklıdır.1: kd> !process PROCESS ffffe0007b65d900 SessionId: none Cid: 0004 Peb: 00000000 ParentCid: 0000 DirBase: 001ab000 ObjectTable: ffffc001c9a03000 HandleCount: 786. Image: System VadRoot ffffe0007ce45930 Vads 14 Clone 0 Private 22. Modified 131605. Locked 64. DeviceMap ffffc001c9a0c220 Token ffffc001c9a05530 ElapsedTime 21:31:02.516 ...Çıkış, işletim sistemini durdurduğunuzda ffffe0007b65d900 sistem işleminin çalıştığını gösterir.
Daha önce kaydettiğiniz
!processile ilişkili olan işlem kimliğine bakmayı denemek için komutunu kullanın. Bu örnekte gösterilen örnek işlem adresi yerine daha önce kaydettiğiniz echoapp.exe işlem adresinizi belirtin.0: kd> !process ffffe0007e6a7780 TYPE mismatch for process object at 82a9acc0echoapp.exe işlemi artık çalışmadığından işlem nesnesi artık kullanılamaz.
Konular
İş parçacıklarını görüntüleme ve ayarlama komutları, işlemler için kullanılan komutlara benzer. İş parçacıklarını görüntülemek için !thread komutunu kullanın. Geçerli iş parçacıklarını ayarlamak için .thread kullanın.
Hedef sistemde kod yürütmeyi yeniden başlatmak için konak sisteminde hata ayıklayıcıya
ggirin.Hedef sistemde EchoApp.exe sürücü testi programını çalıştırın.
Ana sistemde kesme noktasına gelinir ve kod yürütme durdurulur.
Breakpoint 4 hit ECHO!EchoEvtIoRead: aade54c0 55 push ebpÇalışan iş parçacıklarını görüntülemek için "!thread" komutunu girin. Aşağıdaki örneğe benzer bilgiler görüntülenmelidir:
0: kd> !thread THREAD ffffe000809a0880 Cid 0b28.1158 Teb: 00007ff7d00dd000 Win32Thread: 0000000000000000 RUNNING on processor 0 IRP List: ffffe0007bc5be10: (0006,01f0) Flags: 00060a30 Mdl: 00000000 Not impersonating DeviceMap ffffc001d83c6e80 Owning Process ffffe0008096c900 Image: echoapp.exe ...echoapp.exeresim adını not edin. Test uygulamasıyla ilişkili konuya baktığınızı gösteriyor.
bu iş parçacığının
!processile ilişkili işlemde çalışan tek iş parçacığı olup olmadığını belirlemek için komutunu kullanın. İşlemde çalışan iş parçacığının numarası,!threadkomutu tarafından gösterilen iş parçacığıyla aynıdır.0: kd> !process PROCESS ffffe0008096c900 SessionId: 1 Cid: 0b28 Peb: 7ff7d00df000 ParentCid: 0f34 DirBase: 1fb746000 ObjectTable: ffffc001db6b52c0 HandleCount: 34. Image: echoapp.exe VadRoot ffffe000800cf920 Vads 30 Clone 0 Private 135. Modified 8. Locked 0. DeviceMap ffffc001d83c6e80 Token ffffc001cf5dc050 ElapsedTime 00:00:00.048 UserTime 00:00:00.000 KernelTime 00:00:00.000 QuotaPoolUsage[PagedPool] 33824 QuotaPoolUsage[NonPagedPool] 4464 Working Set Sizes (now,min,max) (681, 50, 345) (2724KB, 200KB, 1380KB) PeakWorkingSetSize 651 VirtualSize 16 Mb PeakVirtualSize 16 Mb PageFaultCount 686 MemoryPriority BACKGROUND BasePriority 8 CommitCharge 138 THREAD ffffe000809a0880 Cid 0b28.1158 Teb: 00007ff7d00dd000 Win32Thread: 0000000000000000 RUNNING on processor 0İlgili iki işlemin işlem adresini bulmak ve bu işlem adresini buraya kaydetmek için
!process 0 0komutunu kullanın.Cmd.exe: ____________________________________________________________
EchoApp.exe: _______________________________________________________
0: kd> !process 0 0 … PROCESS ffffe0007bbde900 SessionId: 1 Cid: 0f34 Peb: 7ff72dfa7000 ParentCid: 0c64 DirBase: 19c5fa000 ObjectTable: ffffc001d8c2f300 HandleCount: 31. Image: cmd.exe … PROCESS ffffe0008096c900 SessionId: 1 Cid: 0b28 Peb: 7ff7d00df000 ParentCid: 0f34 DirBase: 1fb746000 ObjectTable: ffffc001db6b52c0 HandleCount: 34. Image: echoapp.exe …Alternatif olarak
!process 0 17kullanarak her işlem hakkında ayrıntılı bilgi görüntüleyebilirsiniz. Bu komuttan elde edilen çıktı uzun olabilir. Çıktı Ctrl+F kullanılarak aranabilir.bilgisayarınızı çalıştıran her iki işlemin işlem bilgilerini listelemek için
!processkomutunu kullanın. Bu örnekte gösterilen adres yerine,!process 0 0çıkışınızdan işlem adresini sağlayın.Bu örnek çıktı, daha önce kaydedilmiş cmd.exe işlem kimliğine yöneliktir. Bu işlem kimliğinin imaj adı cmd.exe.
0: kd> !process ffffe0007bbde900 PROCESS ffffe0007bbde900 SessionId: 1 Cid: 0f34 Peb: 7ff72dfa7000 ParentCid: 0c64 DirBase: 19c5fa000 ObjectTable: ffffc001d8c2f300 HandleCount: 31. Image: cmd.exe VadRoot ffffe0007bb8e7b0 Vads 25 Clone 0 Private 117. Modified 20. Locked 0. DeviceMap ffffc001d83c6e80 Token ffffc001d8c48050 ElapsedTime 21:33:05.840 UserTime 00:00:00.000 KernelTime 00:00:00.000 QuotaPoolUsage[PagedPool] 24656 QuotaPoolUsage[NonPagedPool] 3184 Working Set Sizes (now,min,max) (261, 50, 345) (1044KB, 200KB, 1380KB) PeakWorkingSetSize 616 VirtualSize 2097164 Mb PeakVirtualSize 2097165 Mb PageFaultCount 823 MemoryPriority FOREGROUND BasePriority 8 CommitCharge 381 THREAD ffffe0007cf34880 Cid 0f34.0f1c Teb: 00007ff72dfae000 Win32Thread: 0000000000000000 WAIT: (UserRequest) UserMode Non-Alertable ffffe0008096c900 ProcessObject Not impersonating ...Bu örnek çıktı, daha önce kaydedilmiş echoapp.exe işlem kimliğine yöneliktir.
0: kd> !process ffffe0008096c900 PROCESS ffffe0008096c900 SessionId: 1 Cid: 0b28 Peb: 7ff7d00df000 ParentCid: 0f34 DirBase: 1fb746000 ObjectTable: ffffc001db6b52c0 HandleCount: 34. Image: echoapp.exe VadRoot ffffe000800cf920 Vads 30 Clone 0 Private 135. Modified 8. Locked 0. DeviceMap ffffc001d83c6e80 Token ffffc001cf5dc050 ElapsedTime 00:00:00.048 UserTime 00:00:00.000 KernelTime 00:00:00.000 QuotaPoolUsage[PagedPool] 33824 QuotaPoolUsage[NonPagedPool] 4464 Working Set Sizes (now,min,max) (681, 50, 345) (2724KB, 200KB, 1380KB) PeakWorkingSetSize 651 VirtualSize 16 Mb PeakVirtualSize 16 Mb PageFaultCount 686 MemoryPriority BACKGROUND BasePriority 8 CommitCharge 138 THREAD ffffe000809a0880 Cid 0b28.1158 Teb: 00007ff7d00dd000 Win32Thread: 0000000000000000 RUNNING on processor 0 IRP List: ffffe0007bc5be10: (0006,01f0) Flags: 00060a30 Mdl: 00000000 Not impersonating ...İki işlemle ilişkili ilk iş parçacığı adresini buraya kaydedin.
Cmd.exe: ____________________________________________________
EchoApp.exe: _________________________________________________
Geçerli iş parçacığı hakkındaki bilgileri görüntülemek için
!Threadkomutunu kullanın.0: kd> !Thread THREAD ffffe000809a0880 Cid 0b28.1158 Teb: 00007ff7d00dd000 Win32Thread: 0000000000000000 RUNNING on processor 0 IRP List: ffffe0007bc5be10: (0006,01f0) Flags: 00060a30 Mdl: 00000000 Not impersonating DeviceMap ffffc001d83c6e80 Owning Process ffffe0008096c900 Image: echoapp.exe Attached Process N/A Image: N/A ...Beklendiği gibi, geçerli iş parçacığı echoapp.exe ile ilişkili iş parçacığıdır ve çalışmaktadır.
!Threadişlemiyle ilişkili iş parçacığı hakkındaki bilgileri görüntülemek için komutunu kullanın. Daha önce kaydettiğiniz konu adresini belirtin.0: kd> !Thread ffffe0007cf34880 THREAD ffffe0007cf34880 Cid 0f34.0f1c Teb: 00007ff72dfae000 Win32Thread: 0000000000000000 WAIT: (UserRequest) UserMode Non-Alertable ffffe0008096c900 ProcessObject Not impersonating DeviceMap ffffc001d83c6e80 Owning Process ffffe0007bbde900 Image: cmd.exe Attached Process N/A Image: N/A Wait Start TickCount 4134621 Ticks: 0 Context Switch Count 4056 IdealProcessor: 0 UserTime 00:00:00.000 KernelTime 00:00:01.421 Win32 Start Address 0x00007ff72e9d6e20 Stack Init ffffd0015551dc90 Current ffffd0015551d760 Base ffffd0015551e000 Limit ffffd00155518000 Call 0 Priority 14 BasePriority 8 UnusualBoost 3 ForegroundBoost 2 IoPriority 2 PagePriority 5 Child-SP RetAddr : Args to Child : Call Site ffffd001`5551d7a0 fffff801`eed184fe : fffff801`eef81180 ffffe000`7cf34880 00000000`fffffffe 00000000`fffffffe : nt!KiSwapContext+0x76 [d:\9142\minkernel\ntos\ke\amd64\ctxswap.asm @ 109] ffffd001`5551d8e0 fffff801`eed17f79 : ffff03a5`ca56a3c8 000000de`b6a6e990 000000de`b6a6e990 00007ff7`d00df000 : nt!KiSwapThread+0x14e [d:\9142\minkernel\ntos\ke\thredsup.c @ 6347] ffffd001`5551d980 fffff801`eecea340 : ffffd001`5551da18 00000000`00000000 00000000`00000000 00000000`00000388 : nt!KiCommitThreadWait+0x129 [d:\9142\minkernel\ntos\ke\waitsup.c @ 619] ...Bu iş parçacığı cmd.exe ile ilişkilendirilmiştir ve bekleme durumundadır.
Bağlamı bu bekleyen iş parçacığıyla değiştirmek için bekleyen CMD.exe iş parçacığının adresini sağlayın.
0: kd> .Thread ffffe0007cf34880 Implicit thread is now ffffe000`7cf34880Beklemede olan iş parçacığıyla ilişkili çağrı yığınını görüntülemek için
kkomutunu kullanın.0: kd> k *** Stack trace for last set context - .thread/.cxr resets it # Child-SP RetAddr Call Site 00 ffffd001`5551d7a0 fffff801`eed184fe nt!KiSwapContext+0x76 [d:\9142\minkernel\ntos\ke\amd64\ctxswap.asm @ 109] 01 ffffd001`5551d8e0 fffff801`eed17f79 nt!KiSwapThread+0x14e [d:\9142\minkernel\ntos\ke\thredsup.c @ 6347] 02 ffffd001`5551d980 fffff801`eecea340 nt!KiCommitThreadWait+0x129 [d:\9142\minkernel\ntos\ke\waitsup.c @ 619] 03 ffffd001`5551da00 fffff801`ef02e642 nt!KeWaitForSingleObject+0x2c0 [d:\9142\minkernel\ntos\ke\wait.c @ 683] ...KiCommitThreadWaitgibi çağrı yığını öğeleri bu iş parçacığının beklendiği gibi çalışmadığını gösterir.
İş parçacıkları ve işlemler hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın.
- İş Parçaları ve İşlemler
- bağlamları değiştirme
IRQL, WinDbg oturumunu kaydeder ve sonlandırma
Bu bölümde kesme isteği düzeyini (IRQL) ve yazmaçların içeriğini görüntüleyin.
Kaydedilen IRQL'i görüntüleme
IRQL, kesme hizmetlerinin önceliğini yönetmek için kullanılır. Her işlemci, iş parçacıklarının yükseltebileceği veya azaltabileceği bir IRQL ayarına sahiptir. İşlemcinin IRQL ayarında veya altında oluşan kesintiler maskelenir ve mevcut işlemi kesintiye uğratmaz. İşlemcinin IRQL ayarının üzerinde gerçekleşen kesmeler mevcut işlemden önceliklidir.
Konak sisteminde, !irql uzantısı, hata ayıklayıcının kesmesi gerçekleşmeden önce hedef bilgisayarın geçerli işlemcisindeki IRQL'i görüntüler. Hedef bilgisayar hata ayıklayıcıya girdiğinde, IRQL değişir. Ancak hata ayıklayıcı kırılmasından hemen önce etkili olan IRQL kaydedilir ve !irqltarafından görüntülenir.
0: kd> !irql
Debugger saved IRQL for processor 0x0 -- 2 (DISPATCH_LEVEL)
Yazmaçları görüntüle
Host sisteminde, r (Yazmaçlar) komutunu kullanarak geçerli işlemcideki mevcut iş parçacığının yazmaçlarının içeriğini görüntüleyin.
0: kd> r
rax=000000000000c301 rbx=ffffe00173eed880 rcx=0000000000000001
rdx=000000d800000000 rsi=ffffe00173eed8e0 rdi=ffffe00173eed8f0
rip=fffff803bb757020 rsp=ffffd001f01f8988 rbp=ffffe00173f0b620
r8=000000000000003e r9=ffffe00167a4a000 r10=000000000000001e
r11=ffffd001f01f88f8 r12=0000000000000000 r13=ffffd001f01efdc0
r14=0000000000000001 r15=0000000000000000
iopl=0 nv up ei pl nz na pe nc
cs=0010 ss=0018 ds=002b es=002b fs=0053 gs=002b efl=00000202
nt!DbgBreakPointWithStatus:
fffff803`bb757020 cc int 3
Alternatif bir yöntem olarak, Görünüm>Yazmaçlaröğesini seçerek yazmaçların içeriğini görüntüleyebilirsiniz. Daha fazla bilgi için bkz. r (Yazmaçlar).
Makine dili kod yürütmesi ve diğer senaryolarda yazmaçların içeriğini görüntülemek yararlı olabilir. Derleme dilinin ayrıştırılması hakkında daha fazla bilgi için bkz. Açıklamalı x86 Ayrıştırma ve Açıklamalı x64 Ayrıştırma.
Kayıt içeriği hakkında bilgi için bakınız x86 mimarisi ve x64 mimarisi.
WinDbg oturumunu sonlandırma
Hata ayıklayıcıyı bağlı bırakmak istiyor ama hedef üzerinde çalışmak istiyorsanız, bc *kullanarak tüm kesme noktalarını temizleyin; böylece hedef bilgisayar konak bilgisayarın hata ayıklayıcısına bağlanmaya çalışmaz. Ardından hedef bilgisayarın yeniden çalışmasına izin vermek için g komutunu kullanın.
Hata ayıklama oturumunu sonlandırmak için ana sistemde hata ayıklayıcıya girin ve qd (Çık ve Ayır) komutunu girin veya menüden Hata Ayıklamayı Durdur seçin.
0: kd> qd
Daha fazla bilgi için bkz. WinDbg'de hata ayıklama oturumlarını sonlandırma.
Windows hata ayıklama kaynakları
Windows hata ayıklama hakkında daha fazla bilgi sağlanır. Bu kitaplardan bazıları örneklerinde Windows Vista gibi Windows'un önceki sürümlerini kullanır, ancak ele alınan kavramlar Windows'un çoğu sürümü için geçerlidir.
Kitaplar
- Mario Hewardt ve Daniel Pravat'ın Gelişmiş Windows Hata Ayıklaması
- Windows'un İçinde Hata Ayıklama: Tarik Soulami Tarafından Windows'ta® Hata Ayıklama ve İzleme Stratejileri için Pratik Bir Kılavuz
- Windows İç Yapıları by Pavel Yosifovich, Alex Ionescu, Mark Russinovich and David Solomon
Görüntü
Eğitim satıcıları