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 konular, çeşitli komutlarda kullanılan MASM ve C++ ifadelerinin örneklerini içerir.
Bu Yardım belgelerinin diğer tüm bölümleri örneklerde MASM ifade söz dizimini kullanır (aksi belirtilmedikçe). C++ ifade söz dizimi yapıları ve değişkenleri işlemek için çok yararlıdır, ancak hata ayıklayıcı komutlarının parametrelerini çok iyi ayrıştırmaz.
Hata ayıklayıcı komutlarını genel amaçlarla veya hata ayıklayıcı uzantılarıyla kullanıyorsanız, MASM ifade söz dizimini varsayılan söz dizimi olarak ayarlamanız gerekir; örneğin.expr (İfade Değerlendiriciyi Seç) kullanın. C++ ifade söz dizimini kullanmak için belirli bir parametreniz olması gerekiyorsa , @@( ) söz dizimini kullanın.
myInt ULONG32 bir değerse ve MASM ifade değerlendiricisini kullanıyorsanız, aşağıdaki iki örnek MyInt değerini gösterir.
0:000> ?? myInt
0:000> dd myInt L1
Ancak aşağıdaki örnekte myInt'in adresigösterilmektedir.
0:000> ? myInt
Koşullu Kesme Noktaları
Koşullu kesme noktaları oluşturmak için karşılaştırma işleçlerini kullanabilirsiniz. Aşağıdaki kod örneği MASM ifade söz dizimini kullanır. Geçerli varsayılan radiks 16 olduğundan, örnek 20 sayısının ondalık sayı olarak anlaşılması için 0n ön ekini kullanır.
0:000> bp MyFunction+0x43 "j ( poi(MyVar)>0n20 ) ''; 'gc' "
Önceki örnekte MyVar , C kaynağındaki bir tamsayıdır. MASM ayrıştırıcısı tüm simgeleri adres olarak değerlendirdiğinden, örnekte MyVar belirtecini çözmek için poi işlecinin bulunması gerekir.
Koşullu İfadeler
Aşağıdaki örnek, eaxebx'ten büyükse ecx değerini, eax ebx'ten küçükse 7 ve eaxebx'e eşitse 3 değerini yazdırır. Bu örnekte MASM ifade değerlendiricisi kullanılır, dolayısıyla eşittir işareti (=) atama işleci değil karşılaştırma işlecidir.
0:000> ? ecx*(eax>ebx) + 7*(eax<ebx) + 3*(eax=ebx)
C++ söz diziminde @ işareti bir kayıt göstergesidir, çift eşittir işareti (==) karşılaştırma operatörüdür ve kodda BOOL'den int'e açık atama yapılması gerekir. Bu nedenle, C++ söz diziminde önceki komut aşağıdaki şekilde olur.
0:000> ?? @ecx*(int)(@eax>@ebx) + 7*(int)(@eax<@ebx) + 3*(int)(@eax==@ebx)
MASM ve C++ Karma İfade Örnekleri
C++ ifadesinde kaynak satır ifadelerini kullanamazsınız. Aşağıdaki örnekte, bir MASM ifadesini C++ ifadesi içinde iç içe yerleştirmeye ilişkin @@( ) alternatif değerlendirici söz dizimi kullanılır. Bu örnek MyPtr'yi Myfile.c dosyasının 43. satırının adresine eşit olarak ayarlar.
0:000> ?? MyPtr = @@( `myfile.c:43` )
Aşağıdaki örnekler, varsayılan ifade değerlendiricisini MASM olarak ayarlayıp expression2 değerini bir C++ ifadesi olarak değerlendirip Expression1 ve Expression3 değerlerini MASM ifadeleri olarak değerlendirmektedir.
0:000> .expr /s masm
0:000> bp Expression1 + @@( Expression2 ) + Expression3
myInt ULONG64 bir değerse ve bu değerin bellekte başka bir ULONG64 takip ettiğini biliyorsanız, aşağıdaki örneklerden birini kullanarak bu konumda bir erişim kesme noktası ayarlayabilirsiniz. (İşaretçi aritmetiği kullanımına dikkat edin.)
0:000> ba r8 @@( &myInt + 1 )
0:000> ba r8 myInt + 8