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.
Çekirdek modunda hata ayıklamada, aynı anda yürütülen birçok işlem, iş parçacığı ve bazen kullanıcı oturumları vardır. Bu nedenle, "sanal adres 0x80002000" veya " eax register" gibi tümcecikler belirsizdir. Bu tür tümceciklerin anlaşılacağı bağlamı belirtmelisiniz.
Hata ayıklayıcının, hata ayıklarken ayarlayabileceğiniz beş farklı bağlamı vardır:
Oturum bağlamı varsayılan kullanıcı oturumunu gösterir.
İşlem bağlamı, hata ayıklayıcının sanal adresleri nasıl yorumladığını belirler.
Kullanıcı modu adres bağlamı neredeyse hiçbir zaman doğrudan ayarlanmadı. İşlem bağlamını değiştirdiğinizde bu bağlam otomatik olarak ayarlanır.
Yazmaç bağlamı, hata ayıklayıcının kayıtları nasıl yorumlayıp yığın izlemesinin sonuçlarını denetlediğini belirler. Bu bağlam, iş parçacığı bağlamı olarak da bilinir, ancak bu terim tam olarak doğru değildir. Açık bağlam aynı zamanda bir kayıt bağlamı türüdür. Açık bir bağlam belirtirseniz, geçerli yazmaç bağlamı yerine bu bağlam kullanılır.
Yerel bağlam, hata ayıklayıcının yerel değişkenleri nasıl yorumladığını belirler. Bu bağlam, kapsam olarak da bilinir.
Oturum Bağlamı
Aynı anda birden çok oturum açma oturumu çalıştırılabilir. Her oturum açma oturumlarının kendi işlemleri vardır.
!session uzantısı tüm oturum açma oturumlarını görüntüler veya geçerli oturum bağlamını değiştirir.
Oturum bağlamı, oturum numarası "-2" olarak girildiğinde !sprocess ve !spoolused uzantıları tarafından kullanılır.
Oturum bağlamı değiştirildiğinde, işlem bağlamı otomatik olarak o oturum için etkin işleme değiştirilir.
İşlem Bağlamı
Her işlemin, sanal adreslerin fiziksel adreslerle nasıl eşlendiğini kaydeden kendi sayfa dizini vardır. Bir işlemdeki herhangi bir iş parçacığı yürütülürken, Windows işletim sistemi sanal adresleri yorumlamak için bu sayfa dizinini kullanır.
Kullanıcı modu hata ayıklaması sırasında geçerli işlem işlem bağlamını belirler. Hata ayıklayıcı komutlarında, uzantılarda ve hata ayıklama bilgileri pencerelerinde kullanılan sanal adresler, geçerli işlemin sayfa dizini kullanılarak yorumlanır.
Çekirdek modunda hata ayıklama sırasında .process (İşlem Bağlamını Ayarla) komutunu kullanarak işlem bağlamını ayarlayabilirsiniz. Sanal adresleri yorumlamak için hangi işlemin sayfa dizininin kullanılacağını seçmek için bu komutu kullanın. İşlem bağlamını ayarladıktan sonra, adresleri alan herhangi bir komutta bu bağlamı kullanabilirsiniz. Bu adreste kesme noktaları bile ayarlayabilirsiniz. .process komutuna bir /i seçeneği ekleyerek, invaziv hata ayıklamayı belirterek, kullanıcı alanında kesme noktaları ayarlamak için çekirdek hata ayıklayıcısını da kullanabilirsiniz.
Çekirdek hata ayıklayıcısından, çekirdek alandaki bir işlev üzerinde belirli bir işleme özgü kesme noktası kullanarak kullanıcı modu kesme noktaları da ayarlayabilirsiniz. Stratejik mola noktaları belirleyin ve uygun bağlam oluşana kadar bekleyin.
Kullanıcı modu adres bağlamı, işlem bağlamının bir parçasıdır. Genellikle kullanıcı modu adres bağlamını doğrudan ayarlamanız gerekmez. İşlem bağlamını ayarlarsanız, kullanıcı modu adres bağlamı otomatik olarak işlem için ilgili sayfa tablosunun dizin tabanına dönüşür.
Çekirdek modunda hata ayıklama sırasında işlem bağlamını ayarladığınızda, başka bir .process komutu bağlamı değiştirene kadar bu işlem bağlamı korunur. Kullanıcı modu adres bağlamı, .process veya .context komutu tarafından değiştirilene kadar da korunur. Hedef bilgisayar çalışırken bu bağlamlar değiştirilmez ve yazmaç bağlamındaki veya yerel bağlamdaki değişikliklerden etkilenmezler.
Yazma Bağlamı
Her iş parçacığının kendi yazmaç değerleri vardır. Bu değerler, iş parçacığı yürütülürken CPU kayıtlarında depolanır ve başka bir iş parçacığı yürütülürken bellekte depolanır.
Kullanıcı modu hata ayıklaması sırasında, geçerli iş parçacığı genellikle yazmaç bağlamını belirler. Hata ayıklayıcı komutlarında, uzantılarda ve hata ayıklama bilgi pencerelerinde yazmaçlara yapılan tüm başvurular, mevcut iş parçacığının yazmaçlarına göre değerlendirilir.
Kullanıcı modu hata ayıklaması yaparken, bir aşağıdaki komutlardan birini kullanarak yazmaç bağlamını mevcut iş parçacığının dışında bir değere değiştirebilirsiniz.
.cxr (Bağlam Kaydını Görüntüle)
.ecxr (Özel Durum Bağlam Kaydını Görüntüle)
Çekirdek modunda hata ayıklama sırasında, aşağıdaki komutlar da dahil olmak üzere çeşitli hata ayıklayıcı komutları kullanarak yazmaç bağlamını denetleyebilirsiniz:
.thread (Yazmaç Bağlamı Ayarla)
.cxr (Bağlam Kaydını Görüntüle)
.trap (Tuzak Çerçevesini Görüntüle)
Bu komutlar CPU yazmaçlarının değerlerini değiştirmez. Bunun yerine, hata ayıklayıcı belirtilen yazmaç bağlam bilgisini bellekteki konumundan alır. Aslında, hata ayıklayıcı yalnızca kaydedilmiş yazmaç değerlerini alabilir. (Diğer değerler dinamik olarak ayarlanır ve kaydedilmez. Kaydedilen değerler bir yığın izlemesini yeniden oluşturmak için yeterlidir.
Yazmaç bağlamı ayarlandıktan sonra yeni yazmaç bağlamı , k (Görüntü Yığını Geri çekme) ve r (Yazmaçlar) gibi kayıt değerlerini kullanan tüm komutlar için kullanılır.
Ancak, çok işlemcili bilgisayarlarda hata ayıklarken bazı komutlar bir işlemci belirtmenizi sağlar. (Bu tür komutlar hakkında daha fazla bilgi için bkz . Çok İşlemcili Söz Dizimi.) Bir komut için bir işlemci belirtirseniz, belirtilen işlemci şu anda etkin olan işlemci olsa bile, komut geçerli yazmaç bağlamı yerine belirtilen işlemcideki etkin iş parçacığının yazmaç bağlamını kullanır.
Ayrıca, yazmaç bağlamı geçerli işlemci modu ayarıyla eşleşmiyorsa, bu komutlar yanlış veya anlamsız çıkış üretir. Çıkış hatalarını önlemek için, kayıt durumuna bağlı komutlar, işlemci modunu yazmaç bağlamı ile eşleşecek şekilde değiştirene kadar başarısız olur. İşlemci modunu değiştirmek için .effmach (Effective Machine) komutunu kullanın.
Kayıt bağlamını değiştirmek yerel bağlamı da değiştirebilir. Bu şekilde, yazmaç bağlamı yerel değişkenlerin görüntülenmesini etkileyebilir.
Herhangi bir uygulama yürütme, adımlama veya izleme gerçekleşirse, yazmaç bağlamı program sayacının konumuna uyacak şekilde hemen sıfırlanır. Kullanıcı modunda, geçerli işlem veya iş parçacığı değiştirilirse yazmaç bağlamı da sıfırlanır.
Yazmaç bağlamı yığın izlemelerini etkiler çünkü yığın izlemesi, yığın işaretçisi yazmaç kaydının (x86 tabanlı işlemci üzerinde esp ) işaret ettiği konumda başlar. Yazmaç bağlamı geçersiz veya erişilemez bir değere ayarlanırsa yığın izlemeleri alınamaz.
.apply_dbp (Bağlama Veri Kesme Noktası Uygula) komutunu kullanarak belirli bir kayıt bağlamı için işlemci kesme noktası (veri kesme noktası) uygulayabilirsiniz.
Yerel Bağlam
Bir program yürütülürken, yerel değişkenlerin anlamı program sayacının konumuna bağlıdır, çünkü bu tür değişkenlerin kapsamı yalnızca tanımlandıkları işleve genişletilir.
Kullanıcı modu veya çekirdek modu hata ayıklaması gerçekleştirirken, hata ayıklayıcı yerel bağlam olarak geçerli işlevin (yığındaki geçerli çerçeve) kapsamını kullanır. Bu bağlamı değiştirmek için .frame (Yerel Bağlamı Ayarla) komutunu kullanın veya Çağrılar penceresinde istediğiniz çerçeveye çift tıklayın.
Kullanıcı modu hata ayıklamasında, yerel bağlam her zaman mevcut iş parçacığının yığın izi içinde bir çerçevedir. Çekirdek modunda hata ayıklama sırasında, yerel bağlam her zaman mevcut yazmaç bağlamı iş parçacığının yığın izlemesinde bir çerçeve olarak işlev görür.
Yerel bağlam için aynı anda yalnızca bir yığın çerçevesi kullanabilirsiniz. Diğer çerçevelerdeki yerel değişkenlere erişilemez.
Aşağıdaki olaylardan herhangi biri gerçekleşirse yerel bağlam sıfırlanır:
Herhangi bir program yürütme, adımlama veya izleme
Herhangi bir komutta iş parçacığı sınırlayıcısının (~) kullanımı
Yazmaç bağlamında yapılan tüm değişiklikler
!for_each_frame uzantısı, yığındaki her çerçeve için bir kez olmak üzere art arda tek bir komut yürütmenizi sağlar. Bu komut her çerçevenin yerel bağlamını değiştirir, belirtilen komutu yürütür ve yerel bağlamı özgün değerine döndürür.