Platform Windows Universal: Plugin pada Scripting IL2CPP
FAQ

Platform Windows Universal: Debugging pada Scripting IL2CPP

Debugging C# kode

Untuk debug C# kode dengan IL2CPPBack-end scripting bersatu yang dapat Anda gunakan sebagai alternatif untuk Mono ketika proyek bangunan untuk beberapa platform. More info
Lihat di Glossary
, aktifkan Script Debugging di Membangun Pengaturan sebelum membangun Proyek, dan memungkinkan kemampuan InternetClient, InternetClientServer dan PrivateNetworkClientServer dalam Pengaturan pemainPengaturan yang memungkinkan Anda mengatur berbagai pilihan khusus pemain untuk permainan akhir yang dibangun oleh Unity. More info
Lihat di Glossary
atau manifest. Manifestasi tidak berlebihan ketika Anda membangun di atas bangunan sebelumnya, jadi jika Anda ingin mengubah kemampuan, Anda perlu melakukannya dari editor manifest Visual Studio.

Prosedur debugging sama dengan platform Unity lainnya. Untuk informasi lebih lanjut, lihat Debugging C# kode dalam Unity.

Debugging dihasilkan kode C++

Selain debugging C# kode, Anda dapat debug dihasilkan kode C++ menggunakan Visual Studio.

Kelas dan metode naming dalam kode C++ yang dihasilkan

Kelas IL2CPP terlihat seperti ini: <ClassName>_t#number, di mana <ClassName> adalah nama polos kelas, sementara #number adalah nomor tipe yang unik. #number tidak hadir pada beberapa jenis inti. Contoh:

String_t
Object_t
Type_t
Char_t34
StringBuilder_t26
GuidParser_t1539

Metode IL2CPP terlihat seperti ini: <ClassName>_<MethodName>_m#number, di mana <ClassName> adalah nama kelas biasa dari metode menentukan jenis, <MethodName> adalah nama metode polos dan #number adalah nomor metode unik. Contoh:

GuidParser_ParseHex_m10003
ConfigurationSection_DoDeserializeSection_m1275
String_Format_m4102
Mathf_Sqrt_m289
Thing_Start_m1

Struktur lapangan statis dinamakan seperti ini: <ClassName>_t#number_StaticFields, di mana bagian pertama dari nama struktur identik dengan jenis penentuan, misalnya:

StringBuilder_t26_StaticFields
Thing_t24_StaticFields

Selanjutnya, di atas setiap definisi class/method ada komentar C++ yang menyatakan nama kelas/method penuh. Contoh:

// System.String
struct String_t : public Object_t
{
    // System.Int32 System.String::length
    int32_t _length_0;
    // System.Char System.String::start_char
    uint16_t _start_char_1;
};

// System.Text.StringBuilder
struct StringBuilder_t26  : public Object_t
{
    // System.Int32 System.Text.StringBuilder::_length
    int32_t length_1;
    // System.String System.Text.StringBuilder::_str
    String_t* str_2;
    // System.String System.Text.StringBuilder::_cached_str
    String_t* cached_str_3;
    // System.Int32 System.Text.StringBuilder::_maxCapacity
    int32_t maxCapacity_4;
};

// System.Void MyData::.ctor()
extern "C" void MyData_ctor_m0 (MyData_t2 * this, const MethodInfo* method)
{
    ...
}

// Thing
struct Thing_t24 : public MonoBehaviour_t25
{
    // MyData Thing::m_Data
    MyData_t2 * _m_Data_2;
    // System.Text.StringBuilder Thing::m_Builder
    StringBuilder_t26 * _m_Builder_3;
};
struct Thing_t24_StaticFields
{
    // System.Int32 Thing::s_SomeStaticField
    int32_t _s_SomeStaticField_4;
};

Mengamati nilai variabel

Salah satu bagian debugging yang paling penting adalah mengamati nilai-nilai berbagai variabel. Visual Studio memungkinkan untuk melakukan hal yang relatif mudah dengan membasahi variabel menambahkannya ke jendela jam tangan. Contoh:

Mengamati bidang statis sedikit lebih keras. Dalam IL2CPP, bidang statis disimpan pada instance Il2CppClass itu sendiri. Jadi untuk mengamati lapangan statis, kita akan pertama kali membutuhkan pointer untuk Il2Cpp Struktur kelas tipe itu. Penunjuk ini berada dalam lingkup metode yang menggunakannya, tetapi setelah mengamatinya sekali, itu akan tetap berada di alamat memori yang sama untuk durasi aplikasi berjalan. Struktur Il2CppClass memiliki bidang “static_fields”, yang merupakan pointer untuk blok memori yang mengandung bidang statis untuk jenis tertentu. Untuk melihat nilai-nilai aktual, pointer ini harus dilemparkan ke struktur lapangan statis yang tepat: setiap jenis memiliki sendiri. Misalnya, mari kita amati bidang statis kelas Thing_t24:

Pengecualian investigasi

IL2CPP menggunakan pengecualian C++ asli untuk menerapkan . pengecualian NET. Ketika pengecualian apa pun seharusnya dibuang, IL2CPP membuang objek Il2CppExceptionWrapper, yang didefinisikan sebagai berikut:

struct Il2CppExceptionWrapper
{
    Il2CppException* ex;

    Il2CppExceptionWrapper (Il2CppException* ex) : ex (ex) {}
};

Objek pengecualian ini dapat dengan mudah diselidiki di jendela jam tangan:

Terakhir, mungkin bermanfaat untuk mengaktifkan debugger-break pada pengecualian sehingga sumber pengecualian dapat ditangkap merah-ditanggung. Untuk melakukannya, tekan CTRL+ALT+E di Visual Studio, dan pastikan bahwa c++ pengecualian checkbox diperiksa di jendela dibuka:

Setelah mengaktifkan pengaturan ini, Visual Studio akan secara otomatis menghentikan eksekusi setiap kali pengecualian dibuang:


  • • 2018–10–18 Login

  • C# debugging untuk IL2CPP pada Platform Windows Universal ditambahkan dalam NewIn20182

Platform Windows Universal: Plugin pada Scripting IL2CPP
FAQ