Android Oyun Geliştirme Uzantısı.
Hata ayıklayıcıyı çalıştırma
Hata ayıklayıcıyı çalıştırabilmeniz için öncelikle oyuna dönüştü. Ayrıntılar için Örneği çalıştırma bölümüne bakın.
Oyununuzu hata ayıklayıcı olmadan çalıştırabileceğinizden emin olduktan sonra F5'e basarak veya Hata Ayıklamayı Başlat öğesini seçerek hata ayıklayıcı Hata ayıkla. Hata ayıklayıcı yüklenirken bir iletişim kutusu gösterilir bir seçimdir.
Hata ayıklayıcının başlatılması 10 saniye ila 1 dakika veya daha uzun sürer uygulamanızın boyutuna ve gereken sembol sayısına bağlı olarak başlangıçta yüklenecek. Yeni bir cihaza takmak daha fazla zaman alır. bazı Android kitaplıklarını indirmek zorunda olduğundan ana makineye bağlamalısınız. İlk görüşmenizde 1 dakikadan uzun sürüyorsa yeni bir cihazla birkaç deneme yapılıyorsa hata ayıklama oturumunu iptal edebilir ve ardından yeniden başlatmayı deneyin.
Hata ayıklayıcıyı bu şekilde çalıştırdığınızda oyun, Bekleyenler Hata Ayıklayıcı modundaki herhangi bir oyununuzun kodunu hata ayıklayıcı bağlanır. Bu şekilde, kontrol panelinin başlatma bölümünde de hata ayıklayabilirsiniz. gösterir.
Belirli Visual Studio hata ayıklayıcı özellikleri hakkında daha fazla bilgiyi şu şekilde bulabilirsiniz: Visual Studio Dokümanları'nı okuyun.
İşleme ekleme
Fiziksel veya sanal makinede çalışan bir oyunda hata ayıklamak istiyorsanız hata ayıklayıcıyı işleme Visual Studio'dan ekleyebilirsiniz.
Visual Studio'da bir Android çözümünün açık olduğundan emin olun ve:
- Hata ayıklama menüsüne gidip İşleme ekle... seçeneğini belirleyin.
- Taşıma açılır listesinden Android Oyun Geliştirme Uzantısı'nı seçin.
- Niteleyici açılır listesinden Android cihazınızı seçin.
- Mevcut işlemler listesinden oyun sürecini seçin ve Ekle'yi tıklayın.
LLDB.Shell komutlarını yürütme
Etkin bir hata ayıklama oturumu varken Visual Studio'nun Komut Penceresini kullanarak LLDB.Kabuk komutları.
Komut biçimi:
LLDB.Shell [command]
Örnek:
>LLDB.Shell expr myIntVariable = 9
Status: Success
Output Message:
(int) $2 = 9
Veri görselleştirme
Biçim Belirticileri
Bir değerin görüntülenme biçimini Otomobiller, Biçim tanımlayıcıları kullanan Locals, Watch ve değişken DataTip pencereleri.
Biçim tanımlayıcıları, ifadelerin sonunda bulunur. Virgülle başlarlar.
ve ardından kısa bir dize gelir. Örneğin, _myInt,x
içindeki ,x
tanımlayıcısı
ifade, myInt değerini küçük harfli onaltılık değer olarak biçimlendirir.
Biçim belirleyiciler doğrudan İzle penceresinde veya Autos, Locals ve DataTip pencerelerini Natvis dosyanıza ekleyerek ifade eder. Daha fazla bilgi için Natvis'e göz atın.
Destek tanımlayıcı listesi
Biçim Adı | Belirticiler | Açıklama |
---|---|---|
Boole | B | 0'ın yanlış, diğer her şeyin doğru olduğu genel kuralı kullanarak bunu bir doğru/yanlış boole değeri olarak gösterin |
ikili | b | bunu bir bit dizisi olarak göster |
ikilik, başında 0b yok | bb | bunu, 0b öneki olmayan bir bit dizisi olarak göster |
bayt | y | baytları gösterir ancak bunları ASCII karakterleri olarak da görüntülemeye çalışın ör. (int *) c.sp.x = 50 f8 bf 5f ff 7f 00 00 P.._.... |
ASCII ile bayt | Y | baytları gösterir ancak bunları ASCII karakterleri olarak da görüntülemeye çalışın ör. (int *) c.sp.x = 50 f8 bf 5f ff 7f 00 00 P.._.... |
karakter | c | baytları ASCII karakterleri olarak gösterin (ör. (int *) c.sp.x = P\xf8\xbf_\xff\x7f\0\0 |
yazdırılabilir karakter | C | baytları yazdırılabilir ASCII karakterleri olarak gösterin ör. (int *) c.sp.x = P.._.... |
karmaşık kayan noktalı | C | bu değeri, karmaşık bir kayan nokta sayısının gerçek ve sanal bölümü olarak yorumlayın ör. (int *) c.sp.x = 2.76658e+19 + 4,59163e-41i |
ondalık sayı | d, i | bunu işaretli bir tam sayı olarak gösterir (bu işlem yayınlama yapmaz, sadece baytları işaretli bir tam sayı olarak gösterir) |
numaralandırma | E,tr | bunu bir numaralandırma olarak gösterin, varsa değerin adını, aksi takdirde tam sayı değerini yazdırın ör. (enum enumType) val_type = eValue2 |
onaltılık - küçük harf | x, h | bunu küçük onaltılık gösterimle göster (bu, yayın yapmaz, sadece baytları onaltılık olarak gösterir) |
onaltılık - büyük harf | X, Y | bunu büyük harflerle onaltılık gösterimde gösterir (bu, yayınlama işlemi yapmaz, yalnızca baytları onaltılık olarak gösterir) |
onaltılık - küçük harf, başında 0x yok | xb, hb | bunu 0x öneki olmadan küçük onaltılık gösterimle göster (yayınlama işlemi gerçekleştirilmez, yalnızca baytları onaltılık olarak gösterir) |
onaltılık - büyük harf, başında 0x yok | Xb, Hb | bunu 0x öneki olmadan büyük harflerle onaltılık gösterimde gösterir (bu, yayınlama işlemi yapmaz, yalnızca baytları onaltılık olarak gösterir) |
kayan | f | bunu kayan nokta sayısı olarak gösterin (bu işlem yayın yapmaz, sadece baytları bir IEEE754 kayan nokta değeri olarak yorumlar) |
sekizlik | o | bunu sekizlik gösterimle göster |
İşletim sistemi türü | O | bunu bir MacOS OSType olarak göster ör. (kayan) x = '\n\x1f\xd7\n' |
dize - C-dizesi | s | bunu 0 sonlu bir C dizesi olarak gösterin ör. "merhaba dünya" |
dize - C-dizesi, tırnak işareti yok | sb | bunu tırnak işaretleri olmadan, 0 sonlu C dizesi olarak gösterin, ör. merhaba dünya |
dize - UTF-8 | s8 | bunu 0 sonlu bir UTF-8 dizesi olarak gösterin ör. u8"merhaba dünya ☕" |
dize - UTF-8, tırnak işareti yok | s8b | bunu tırnak işareti olmadan 0 ile sonlandırılmış bir UTF-8 dizesi olarak gösterin ör. merhaba dünya ☕ |
dize - UTF-16 | su | bunu 0 sonlu bir UTF-16 dizesi olarak gösterin ör. u"merhaba dünya ☕" |
dize - UTF-16, tırnak işareti yok | abone | bunu tırnak işaretleri olmadan, 0 sonlu bir UTF-16 dizesi olarak gösterin ör. merhaba dünya ☕ |
dize - UTF-32 | s32 | bunu 0 sonlu bir UTF-32 dizesi olarak gösterin ör. "Merhaba dünya ☕" |
dize - UTF-32, tırnak işareti yok | s32b | bunu tırnak işaretleri olmadan, 0 sonlu bir UTF-32 dizesi olarak gösterin ör. merhaba dünya ☕ |
unicode16 | U | bunu UTF-16 karakterleri olarak gösterin ör. (kayan) x = 0xd70a 0x411f |
unicode32 | U32 | bunu UTF-32 karakterleri olarak gösterin ör. (kayan) x = 0x411fd70a |
işaretsiz ondalık sayı | u | bunu işaretsiz bir tam sayı olarak gösterir (bu, yayın yapmaz, yalnızca baytları işaretsiz tam sayı olarak gösterir) |
işaretçi | p | bunu yerel bir işaretçi olarak gösterin (bu gerçekten bir işaretçi değilse elde edilen adres muhtemelen geçersiz olacaktır) |
karmaşık tam sayı | İ | bu değeri karmaşık bir tam sayı sayısının gerçek ve sanal bölümü olarak yorumlayın ör. (int *) işaretçi = 1048960 + 1i |
karakter dizisi | a | bunu bir karakter dizisi olarak gösterin ör. (karakter) *c.sp.z = {X} |
İşlenmemiş | ! | ham biçim, veri türü görünümlerinin özelleştirmesi göz ardı edilir |
Natvis
Natvis çerçevesi, Visual Studio'nun görüntülenme şeklini özelleştirmenizi sağlar. yerel türleri kontrol edin. Örneğin, Natvis'i kullanarak İzle, Yereller ve Veri İpuçları pencereleri için ekranları özelleştirebilirsiniz.
Natvis özelliği varsayılan olarak etkindir ancak Visual Studio'dan devre dışı bırakılabilir. Araçlar > Seçenekler > Android Oyun Geliştirme Uzantısı > Natvis Devre dışı olarak işaretleyin.
Natvis dosyaları yükleniyor
Visual Studio, aşağıda listelenen üç konumdan Natvis dosyalarını yükler ve her hata ayıklama oturumu başlattığınızda bunları yeniden yükler. Dosyalar Visual Studio 2017 Natvis şeması.
- Yüklenmiş bir projenin veya üst düzey çözüm öğesinin parçası olan
.natvis
dosyaları. - Kullanıcıya özel dizin
(
%USERPROFILE%\Documents\Visual Studio 2017\Visualizers
) - Sistem genelinde dizin
(
%VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers
)
Natvis dosyalarını yeniden yükleme
.natvisreload
öğesini
Komut Penceresi veya İzleme penceresi.
Örnek Natvis dosyası
Bu örnek Natvis dosyası şu anda mevcut tüm etiketleri ve özellikleri içerir desteklenir.
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="demo::Vector<*>">
<AlternativeType Name="MySimilarVectorType<*>"/>
<!-- Included to show the <SmartPointer> feature is supported. -->
<SmartPointer Optional="true" Usage="Minimal">ptr</SmartPointer>
<!-- Included to show the <DisplayString> feature is supported. -->
<DisplayString Condition="_size == 0" Optional="true">()</DisplayString>
<DisplayString Condition="_size == 1">(x={_items[0]})</DisplayString>
<DisplayString Condition="_size == 2">(x={_items[0]}, y={_items[1]})</DisplayString>
<DisplayString Condition="_size == 3">(x={_items[0]}, y={_items[1]}, z={_items[2]})</DisplayString>
<DisplayString>[Size={_size,x}] (x={_items[0]}, y={_items[1]}, z={_items[2]}, ...)</DisplayString>
<!-- Included to show the <StringView> feature is supported. -->
<StringView Condition="true" Optional="true">_stringViewText</StringView>
<Expand HideRawView="false">
<!-- Included to show the <Item> feature is supported. -->
<Item Name="X" Condition="_size < 4 && _size >= 1" Optional="true">_items[0]</Item>
<Item Name="Y" Condition="_size < 4 && _size >= 2" Optional="true">_items[1]</Item>
<Item Name="Z" Condition="_size < 4 && _size >= 3" Optional="true">_items[2]</Item>
<!-- Included to show the <ArrayItems> feature is supported. -->
<ArrayItems Condition="_size >= 4" Optional="true">
<Size Condition="true" Optional="true">_size</Size>
<ValuePointer Condition="true">_items</ValuePointer>
</ArrayItems>
<!-- Included to show the <IndexListItems> feature is supported. -->
<IndexListItems Condition="true" Optional="true">
<Size Condition="true" Optional="true">_listSize</Size>
<ValueNode Condition="true">_list[%i]</ValueNode>
</IndexListItems>
<!-- Included to show the <LinkedListItems> feature is supported. -->
<LinkedListItems Condition="true" Optional="true">
<Size Optional="true">_listSize</Size>
<HeadPointer>_head</HeadPointer>
<NextPointer>_next</NextPointer>
<ValueNode>_value</ValueNode>
</LinkedListItems>
<!-- Included to show the <ExpandedItem> feature is supported. -->
<ExpandedItem Condition="true" Optional="true">_childVar</ExpandedItem>
<!-- Included to show the <Synthetic> feature is supported. -->
<Synthetic Name="[Size]" Condition="true" Optional="true">
<DisplayString>_size</DisplayString>
<Expand HideRawView="true">
<!-- Any supported <Expand> sub-tags. -->
</Expand>
</Synthetic>
<!-- Included to show the <TreeItems> feature is supported. -->
<TreeItems Condition="true" Optional="true">
<Size>_treeSize</Size>
<HeadPointer>_head</HeadPointer>
<LeftPointer>_left</LeftPointer>
<RightPointer>_right</RightPointer>
<ValueNode>_value</ValueNode>
</TreeItems>
<!-- Included to show format specifiers are supported. -->
<Item Name="[Hex Dump at {_index,x}]">myInt[_index],x</Item>
</Expand>
</Type>
</AutoVisualizer>
Natvis dosyalarını yazma
Visual Studio, kendi Natvis dosyalarınızı yazmayı destekler. Okuyucu Gelirleri Yöneticisi'ni hata ayıklayıcı değişken pencerelerini özelleştirme hakkında bilgi için bkz. MSDN ile kullanılabilir.
Natvis dosyalarında hata ayıklama
Bazı durumlarda hatalar bir değişkenin Değeri olarak sunulur (ör.
Otomatik, Saat vb. pencerelerde) yer alır. Örnek: <error: use of undeclared
identifier 'missingVar'>
GoogleAndroid.log
öğesini açarak hatayla ilgili daha fazla ayrıntıya erişebilirsiniz.
dosyasını seçin.
Bilinen sınırlamalar
Etiketiniz veya özelliğiniz yukarıdaki örnek dosyada listelenmiyorsa şu anda destekleniyor. Visual Studio, desteklenmeyen etiketleri ve özellikleri yoksayar. bunları mevcut bir Natvis dosyasında bırakabilirsiniz. Dosya, şemamızı kullanıyor.
Usage
özelliği, şema için gerekli olsa da,<SmartPointer>
. Ancak LLDB, operatörlerle erişimi kısıtlamaz. Böylece, gerekli herhangi bir operatörün yerine C++ dilinde tanımlanabilir.