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.
Ayrıştırılmış ikili dosyalar yerine kodun kaynağını analiz edebilirseniz uygulamada hata ayıklamak daha kolaydır.
Kaynak dil C, C++ veya derlemeyse WinDbg, CDB ve KD hata ayıklamada kaynak kodu kullanabilir.
Derleme Gereksinimleri
Kaynak hata ayıklamayı kullanmak için, ikili dosyalar oluşturulduğunda derleyicinizin veya bağlayıcınızın sembol dosyaları (.pdb dosyaları) oluşturmasını sağlamanız gerekir. 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.
Ayrıca, sembol dosyaları gerçek kaynak metni içermediğinden hata ayıklayıcının gerçek kaynak dosyalarına erişebilmesi gerekir.
Mümkünse, derleyici ve bağlayıcı kodunuzu iyileştirmemelidir. Kod iyileştirilmişse kaynak hata ayıklama ve yerel değişkenlere erişim daha zordur ve bazen neredeyse imkansızdır. Derleyiciniz ve bağlayıcınız olarak Derleme yardımcı programını kullanıyorsanız, iyileştirmeyi önlemek için MSC_OPTIMIZATION makroyu /Od /Oi olarak ayarlayın.
Sembol Dosyalarını ve Kaynak Dosyaları Bulma
Kaynak modda hata ayıklamak için hata ayıklayıcının kaynak dosyaları ve sembol dosyalarını bulabilmesi gerekir. Daha fazla bilgi için bkz. Kaynak yolu.
kaynak hata ayıklamayı
Hata ayıklayıcı, şu anda hata ayıklanan iş parçacığı için uygun sembollere ve kaynak dosyalarına sahip olduğunda kaynak bilgilerini görüntüleyebilir.
Hata ayıklayıcısını kullanarak yeni bir kullanıcı modu uygulaması başlatırsanız, Ntdll.dll uygulamayı yüklediğinde ilk kesme gerçekleşir. Hata ayıklayıcının Ntdll.dll kaynak dosyalarına erişimi olmadığından, bu noktada uygulamanızın kaynak bilgilerine erişemezsiniz.
Program sayacını uygulamanın başına taşımak için, ikili dosyanıza giriş noktasına bir kesme noktası ekleyin. Hata Ayıklayıcısı Komutu penceresine aşağıdaki komutu yazın.
bp main
g
Ardından uygulama yüklenir ve ana işlevi girildiğinde durdurulur. (Elbette, yalnızca anadeğil, herhangi bir giriş noktasını da kullanabilirsiniz.)
Uygulama bir hata oluşturursa hata ayıklama moduna düşer. Kaynak bilgileri bu noktada kullanılabilir. Ancak, CTRL+C, CTRL+BREAK veya Hata Ayıklama | Kesme komutunu kullanarak bir kesme yaparsanız, hata ayıklayıcı yeni bir iş parçacığı oluşturur, bu nedenle kaynak kodunuzu göremezsiniz.
Kaynak dosyalarınız olan bir iş parçacığına ulaştıktan sonra, kaynak hata ayıklama komutlarını yürütmek için Hata Ayıklayıcı Komut penceresini kullanabilirsiniz. WinDbg kullanıyorsanız Kaynak penceresi görüntülenir. Dosya menüsünde Açık Kaynak Dosya tıklayarak zaten bir Kaynak penceresi açtıysanız, WinDbg genellikle kaynak için yeni bir pencere oluşturur. Hata ayıklama işlemini etkilemeden önceki pencereyi kapatabilirsiniz.
WinDbg GUI'sinde kaynak hata ayıklama
WinDbg kullanıyorsanız, program sayacı hata ayıklayıcının kaynak bilgilerine sahip olduğu kodda yer alır almaz bir Kaynak penceresi görüntülenir.
WinDbg, sizin veya WinDbg'nin açtığı her kaynak dosya için bir Kaynak penceresi görüntüler. Bu pencerenin metin özellikleri hakkında daha fazla bilgi için bkz. kaynak windows .
Ardından uygulamanızda adım adım ilerleyebilir veya bir kesme noktasına ya da imlecin bulunduğu yere kadar çalıştırabilirsiniz. Adımlama ve izleme komutları hakkında daha fazla bilgi için bkz. Hedefi Kontrol Etme.
Kaynak modundaysanız, uygulamanızda adım adım ilerledikçe uygun Kaynak penceresi ön plana taşınır. Uygulamanın yürütülmesi sırasında çağrılan Microsoft Windows yordamları da olduğundan, hata ayıklayıcı bu tür bir çağrı gerçekleştiğinde bir Ayrıştırma penceresini ön plana taşıyabilir (çünkü hata ayıklayıcının bu işlevler için kaynağa erişimi yoktur). Program sayacı bilinen kaynak dosyalarına geri döndüğünde, uygun Kaynak penceresi etkin hale gelir.
Siz uygulamada ilerledikçe, WinDbg Kaynak penceresinde ve Ayrıştırma penceresinde konumunuzu vurgular. Kesme noktalarının ayarlandığı satırlar da vurgulanır. Kaynak kod, dili ayrıştırmaya göre renklendirilir. Kaynak penceresi seçildiyse, değerlendirmek için fareyle bir simgenin üzerine gelebilirsiniz. Bu özellikler ve bunları denetleme hakkında daha fazla bilgi için bkz. Kaynak Windows.
WinDbg'de kaynak modunu etkinleştirmek için l+t komutunu kullanın, hata ayıklama menüsünde kaynak modu tıklayın veya düğmesinde kaynak modu tıklayın. Kaynak modu etkin olduğunda, durum çubuğunda ASM göstergesi kullanılamaz durumda görünür.
Kaynak modunda bir işlevde ilerlediğinizde yerel değişkenlerin değerlerini görüntüleyebilir veya değiştirebilirsiniz. Daha fazla bilgi için bkz. Okuma ve Yazma Belleği.
Hata Ayıklayıcı Komut Penceresinde Kaynak Ayıklama
CDB kullanıyorsanız, ayrı bir Kaynak pencereniz yoktur. Ancak, kaynakta ilerledikçe ilerleme durumunuzu görüntülemeye devam edebilirsiniz.
CDB'de kaynak hata ayıklaması yapabilmeniz için önce .lines (Kaynak Satırı Desteğini Değiştir) komutunu vererek veya hata ayıklayıcısını -lines komut satırı seçeneğiyle başlatarakkaynak satır simgelerini yüklemeniz gerekir.
bir l+t komutu yürütürseniz, tüm program adımlama işlemleri aynı anda bir kaynak satırda gerçekleştirilir. l-t kullanarak montaj talimatını adım adım uygulayın. WinDbg kullanıyorsanız, bu komut Hata Ayıklama menüsünde Kaynak Modu seçme veya temizleme ya da araç çubuğu düğmelerini kullanmayla aynı etkiye sahiptir.
l+s komutu, istemde geçerli kaynak satırı ve satır numarasını görüntüler. Yalnızca satır numarasını görmek istiyorsanız bunun yerine l+l kullanın.
l+o ve l+skullanıyorsanız, programda ilerlerken yalnızca kaynak satır görüntülenir. Program sayacı, ayrıştırma kodu ve kayıt bilgileri gizlenir. Bu tür bir görüntü, kodda hızlı bir şekilde adım adım ilerleyip kaynak dışında hiçbir şeyi görüntülemenizi sağlar.
lsp (Kaynak Satır Sayısını Ayarla) komutunu kullanarak uygulamayı adım adım ilerlerken veya yürütürken tam olarak kaç kaynak satırı görüntüleneceğini belirtebilirsiniz.
Aşağıdaki komut dizisi, kaynak dosyada adım adım ilerletmek için etkili bir yoldur.
.lines enable source line information
bp main set initial breakpoint
l+t stepping will be done by source line
l+s source lines will be displayed at prompt
g run program until "main" is entered
pr execute one source line, and toggle register display off
p execute one source line
ENTER son komutu yinelediğinden, artık ENTER tuşunu kullanarak uygulamada adım adım ilerleyebilirsiniz. Her adım kaynak satırın, bellek uzaklığının ve derleme kodunun görünmesine neden olur.
Ayrıştırma ekranını yorumlama hakkında daha fazla bilgi için bkz. Asm Modu'nda Hata Ayıklama.
Derleme kodu görüntülendiğinde, erişilmekte olan tüm bellek konumları satırın sağ ucunda görüntülenir. Bu konumlardaki değerleri görüntülemek veya değiştirmek için d* (Görüntü Belleği) ve e* (Değerleri Girin) komutlarını kullanabilirsiniz.
Her derleme yönergesini analiz ederek uzaklıkları veya bellek bilgilerini belirlemeniz gerekiyorsa, kaynak satırları yerine derleme yönergelerine göre adım adım ilerlemek için l-t kullanın. Kaynak satır bilgileri yine de görüntülenebilir. Her kaynak satır bir veya daha fazla derleme yönergesine karşılık gelir.
Bu komutların tümü WinDbg ve CDB'de kullanılabilir. Komutlarını kullanarak Kaynak penceresi yerine WinDbg'nin Hata Ayıklayıcısı Komut penceresinden kaynak satır bilgilerini görüntüleyebilirsiniz.
Kaynak Çizgileri ve Ofsetler
Ayrıca, belirli bir kaynak satıra karşılık gelen uzaklığı belirlemek için ifade değerlendiricisini kullanarak kaynak hata ayıklaması gerçekleştirebilirsiniz.
Aşağıdaki komut bir bellek uzaklığı görüntüler.
? `[[module!]filename][:linenumber]`
dosya adınıatlarsanız, hata ayıklayıcı geçerli program sayacına karşılık gelen kaynak dosyayı arar.
Hata ayıklayıcısı, geçerli varsayılan radikse bakılmaksızın önüne 0x eklemediğiniz sürece satırsayısı ondalık sayı olarak okur. satırsayısınıatlarsanız, ifade, kaynak dosyaya karşılık gelen yürütülebilir dosyanın ilk adresine göre değerlendirilir.
Bu söz dizimi CDB'de yalnızca .lines komutu veya -lines komut satırı seçeneği kaynak satır simgeleri yüklemişse anlaşılır.
Bu teknik çok yönlüdür, çünkü program sayacının nereye işaret ettiği fark etmeksizin bunu kullanabilirsiniz. Örneğin, bu teknik aşağıdaki gibi komutları kullanarak kesme noktalarını önceden ayarlamanıza olanak tanır.
bp `source.c:31`
Daha fazla bilgi için bkz. Kaynak Satırı Söz Dizimi ve Kesme Noktalarını Kullanma.
Kaynak Modunda Adımlama ve İzleme
Kaynak modunda hata ayıklarken, tek bir kaynak satırda birden çok işlev çağrısı olabilir. Bu işlev çağrılarını ayırmak için p ve t komutlarını kullanamazsınız.
Örneğin, aşağıdaki komutta t komutu, hem GetTickCount hem de printffonksiyonlarına adım atarken, p komutu her iki fonksiyon çağrısını atlar.
printf( "%x\n", GetTickCount() );
Belirli çağrıları atlayıp diğer çağrıları izlemek istediğinizde, hangi çağrıların atlanacağını belirtmek için .step_filter (Adım Filtresini Ayarla) kullanın.
Çerçeve işlevlerini (örneğin, Microsoft Foundation Sınıfları (MFC) veya Etkin Şablon Kitaplığı (ATL) çağrıları) filtrelemek için _step_filter kullanabilirsiniz.