Mendebug aplikasi multirangkaian di Visual Studio
Rangkaian adalah urutan instruksi saat sistem operasi memberikan waktu prosesor. Setiap proses yang berjalan dalam sistem operasi terdiri dari setidaknya satu rangkaian. Proses yang memiliki lebih dari satu rangkaian disebut multirangkaian.
Komputer dengan beberapa prosesor, prosesor multi-inti, atau proses hyperthreading dapat menjalankan beberapa rangkaian simultan. Pemrosesan paralel yang menggunakan banyak rangkaian dapat sangat meningkatkan performa program, tetapi mungkin juga membuat penelusuran kesalahan lebih sulit karena Anda melacak banyak rangkaian.
Pemrosesan paralel yang sempurna tidak selalu dimungkinkan. Utas kadang harus disinkronkan. Satu utas mungkin harus menunggu hasil dari utas lain, atau satu utas mungkin memerlukan akses eksklusif ke sumber daya yang digunakan oleh utas lain. Masalah sinkronisasi adalah penyebab umum bug dalam aplikasi multiutas. Kadang utas mungkin akhirnya menunggu sumber daya yang tidak pernah tersedia. Ini mengakibatkan kondisi yang disebut kebuntuan.
Utas dan proses
Utas dan proses adalah konsep terkait dalam ilmu komputer. Keduanya mewakili urutan petunjuk yang harus dijalankan dalam urutan tertentu. Akan tetapi, petunjuk dalam utas atau proses terpisah dapat dijalankan secara paralel.
Proses ada dalam sistem operasi dan sesuai dengan apa yang dilihat pengguna sebagai program atau aplikasi. Utas, di sisi lain, ada dalam proses. Untuk alasan ini, utas kadang disebut sebagai proses ringan. Tiap proses terdiri dari satu atau beberapa utas.
Adanya beberapa proses memungkinkan komputer untuk melakukan lebih dari satu tugas sekaligus. Keberadaan beberapa utas memungkinkan proses untuk memisahkan pekerjaan yang akan dilakukan secara paralel. Di komputer dengan multiprosesor, proses atau utas dapat berjalan pada prosesor yang berbeda. Ini memungkinkan pemrosesan paralel yang sebenarnya.
Alat untuk mendebug aplikasi multirangkaian
Visual Studio menyediakan berbagai alat untuk digunakan dalam mendebug aplikasi multirangkaian.
Untuk rangkaian, alat utama untuk mendebug rangkaian adalah jendela Rangkaian, penanda rangkaian di jendela sumber, jendela Tumpukan Paralel, jendela Pengawasan Paralel, dan toolbar Lokasi Debug. Untuk mempelajari tentang jendela Rangkaian dan toolbar Lokasi Debug, lihat Panduan: Mendebug menggunakan jendela Rangkaian. Untuk mempelajari cara menggunakan jendela Tumpukan Paralel dan Pengawasan Paralel, lihat Mulai mendebug aplikasi multirangkaian. Kedua topik menunjukkan cara menggunakan penanda rangkaian.
Untuk kode yang menggunakan Pustaka Paralel Tugas (TPL) atau Runtime Konkurensi, alat utama untuk penelusuran kesalahan adalah jendela Tumpukan Paralel, jendela Pengawasan Paralel, dan jendela Tugas, yang juga mendukung JavaScript. Untuk memulai, lihat Panduan: Mendebug aplikasi paralel dan Panduan: Mendebug aplikasi C++ AMP.
Untuk mendebug rangkaian pada GPU, alat utamanya adalah jendela Rangkaian GPU. Lihat Cara: Menggunakan jendela Rangkaian GPU.
Untuk proses, alat utama adalah kotak dialog Lampirkan ke Proses, jendela Proses, dan toolbar Lokasi Debug.
Visual Studio juga menyediakan titik henti dan titik pelacakan yang kuat, yang dapat berguna saat Anda mendebug aplikasi multirangkaian. Gunakan kondisi dan filter titik henti untuk menempatkan titik henti pada rangkaian individual. Titik pelacakan memungkinkan Anda melacak eksekusi program Anda tanpa melanggar, untuk mempelajari masalah seperti kebuntuan. Untuk mengetahui informasi selengkapnya, lihat Tindakan titik henti dan titik pelacakan.
Mendebug aplikasi multirangkaian yang memiliki antarmuka pengguna bisa sangat sulit. Anda mungkin mempertimbangkan untuk menjalankan aplikasi di komputer kedua dan menggunakan penelusuran kesalahan jarak jauh. Untuk informasi selengkapnya, lihat Penelusuran kesalahan jarak jauh.
Tabel berikut menampilkan informasi yang tersedia dan tindakan yang dapat Anda lakukan di setiap tempat ini:
Antarmuka Pengguna | Informasi yang Tersedia | Tindakan yang Dapat Anda Lakukan |
---|---|---|
Kotak dialog Lampirkan ke Proses | Proses yang Tersedia yang dapat Anda lampirkan ke: - Nama proses (.exe) - Nomor ID proses - Judul Bilah Menu - Jenis (Terkelola v4.0; Terkelola v2.0, v1.1, v1.0; x86; x64; IA64) - Nama Pengguna (nama akun) - Jumlah sesi |
Pilih proses yang akan dilampirkan Pilih komputer jarak jauh Ubah jenis transportasi untuk menyambungkan ke komputer jarak jauh |
Jendela Proses | Proses Terlampir: - Nama Proses - Nomor ID proses - Jalur untuk memproses .exe - Judul Bilah Menu - Status (Jeda. Berjalan) - Debug (Native, Terkelola, dan sebagainya.) - Jenis transportasi (default, native tanpa autentikasi) - Pengkualifikasi Transportasi (komputer jarak jauh) |
Peralatan: - Lampirkan - Copot - Hentikan Menu pintasan - Lampirkan - Copot - Copot saat debug dihentikan - Hentikan |
Jendela Utas | Utas dalam proses saat ini: - ID Utas - ID Terkelola - Kategori (utas utama, utas antarmuka, penanganan panggilan prosedur jarak jauh, atau utas pekerja) - Nama Utas - Lokasi tempat utas dibuat - Prioritas - Masker Afinitas - Jumlah Ditangguhkan - Nama Proses - Indikator Bendera - Indikator ditangguhkan |
Peralatan: - Cari - Cari Tumpukan Panggilan - Beri Bendera Hanya Kode Saya - Beri Bendera Pemilihan Modul Kustom - Kelompokkan menurut - Kolom - Luaskan/Ciutkan tumpukan panggilan - Luaskan/Ciutkan grup - Bekukan/Cairkan Utas Menu pintasan - Tampilkan utas dalam sumber - Beralih ke utas - Bekukan utas yang sedang berjalan - Cairkan utas beku - Beri bendera utas untuk studi tambahan - Hapus bendera utas - Ganti nama utas - Tampilkan dan sembunyikan utas Tindakan lain: - Tampilkan tumpukan panggilan untuk utas dalam DataTip |
Jendela sumber | Indikator utas di tepian kiri menandakan satu atau beberapa utas (nonaktif secara default, diaktifkan dengan menggunakan menu pintasan di jendela Utas) | Menu pintasan - Beralih ke utas - Beri bendera utas untuk studi tambahan - Hapus bendera utas |
Toolbar Lokasi Debug | - Proses saat ini - Tangguhkan aplikasi - Lanjutkan aplikasi - Tangguhkan dan matikan aplikasi - Utas saat ini - Alihkan status bendera utas saat ini - Tampilkan hanya utas yang diberi bendera - Tampilkan hanya proses saat ini - Bingkai tumpukan saat ini |
- Beralih ke proses lain - Tangguhkan, lanjutkan, atau matikan aplikasi - Beralih ke utas lain dalam proses saat ini - Beralih ke bingkai tumpukan lain dalam utas saat ini - Beri bendera atau hapus bendera utas saat ini - Tampilkan hanya utas yang diberi bendera - Tampilkan hanya proses saat ini |
Jendela Tumpukan Paralel | - Panggil tumpukan untuk beberapa utas dalam satu jendela. - Bingkai tumpukan aktif untuk tiap utas. - Pemanggil dan yang dipanggil untuk metode apa pun. - Deteksi Kebuntuan |
- Memfilter utas yang ditentukan - Memfilter tumpukan kode eksternal - Beralih ke tampilan Tugas - Beri bendera atau hapus bendera utas -Zoom - Salin Bingkai Tumpukan - Simpan/Ekspor semua tumpukan sebagai gambar |
Jendela Pengawasan Paralel | - Kolom bendera, di mana Anda dapat menandai utas yang ingin Anda beri perhatian khusus. - Kolom bingkai, di mana panah menandakan bingkai yang dipilih. Kolom yang dapat dikonfigurasi yang dapat menampilkan komputer, proses, petak, tugas, dan utas. |
- Beri bendera atau hapus bendera utas - Tampilkan hanya utas yang diberi bendera - Beralih bingkai - Urutkan kolom - Kelompokkan utas - Bekukan atau cairkan utas - mengekspor data di jendela Pengawasan Paralel |
Jendela Tugas | - Lihat informasi tentang objek Task termasuk ID tugas, status tugas (terjadwal, berjalan, menunggu, mengalami kebuntuan), dan utas mana yang ditetapkan ke tugas. - Lokasi saat ini dalam tumpukan panggilan. - Delegasi yang diteruskan ke tugas pada waktu pembuatan |
- Beralih ke tugas saat ini - Beri bendera atau hapus bendera tugas - Bekukan atau cairkan tugas |
Jendela Utas GPU | - Kolom bendera, di mana Anda dapat menandai utas yang ingin Anda beri perhatian khusus. - Kolom utas saat ini, di mana panah kuning menandakan utas saat ini. - Kolom Jumlah Utas, yang menampilkan jumlah utas di lokasi yang sama. - Kolom Baris, yang menampilkan baris kode tempat tiap grup utas berada. - Kolom Alamat, yang menampilkan alamat petunjuk tempat tiap grup utas berada. - Kolom Lokasi, yang merupakan lokasi dalam kode alamat. - Kolom Status, yang menampilkan apakah utas aktif atau diblokir. - Kolom Petak, yang menampilkan indeks petak untuk utas dalam baris. |
- Ubah ke utas yang berbeda - Tampilkan petak dan utas tertentu - Tampilkan atau sembunyikan kolom - Urutkan menurut kolom - Kelompokkan utas - Bekukan atau cairkan utas - Beri bendera atau hapus bendera utas - Tampilkan hanya utas yang diberi bendera |