Rumah Java javaTutorial Menyahpepijat Aplikasi Tidak Aktif

Menyahpepijat Aplikasi Tidak Aktif

Aug 19, 2024 pm 12:32 PM

Baca dalam bahasa lain: English Español 中文

Terdapat banyak tutorial penyahpepijat di luar sana yang mengajar anda cara menetapkan titik putus baris, nilai log atau menilai ungkapan. Walaupun pengetahuan ini sahaja menyediakan banyak alat untuk menyahpepijat aplikasi anda, senario dunia sebenar boleh menjadi sedikit lebih kompleks dan memerlukan pendekatan yang lebih maju.

Dalam artikel ini, kita akan belajar cara mencari kod yang menyebabkan UI membeku tanpa banyak pengetahuan reka bentuk dan membetulkan kod yang rosak dalam masa nyata.

Masalahnya

Jika anda ingin mengikuti, mulakan dengan mengklon repositori ini: https://github.com/flounder4130/debugger-example

Andaikan anda mempunyai aplikasi kompleks yang ranap apabila anda melakukan sesuatu tindakan. Anda tahu cara menghasilkan semula pepijat, tetapi kesukarannya ialah anda tidak tahu bahagian mana kod yang bertanggungjawab untuk fungsi ini.

Depurando Aplicativos Inativos

Dalam apl contoh kami, tidur berlaku apabila anda mengklik Butang N. Walau bagaimanapun, tidak begitu mudah untuk mencari kod yang bertanggungjawab untuk tindakan ini:

Depurando Aplicativos Inativos

Mari kita lihat bagaimana kita boleh menggunakan penyahpepijat untuk mencarinya.

Titik Putus Kaedah

Kelebihan titik putus kaedah berbanding titik putus baris ialah ia boleh digunakan merentas seluruh hierarki kelas. Bagaimanakah ini berguna dalam kes kami?

Jika anda melihat contoh projek, anda akan melihat bahawa semua kelas tindakan diperoleh daripada antara muka Tindakan dengan satu kaedah: perform().

Depurando Aplicativos Inativos

Menetapkan titik putus kaedah pada kaedah antara muka ini akan menggantung aplikasi apabila salah satu kaedah terbitan dipanggil. Untuk menetapkan titik putus kaedah, klik pada baris yang mengisytiharkan kaedah.

Mulakan sesi nyahpepijat dan klik Butang N. Permohonan digantung dalam ActionImpl14. Sekarang kita tahu di mana kod yang sepadan dengan butang ini terletak.

Depurando Aplicativos Inativos

Walaupun dalam artikel ini kami memberi tumpuan untuk mencari pepijat, teknik ini juga boleh menjimatkan banyak masa apabila anda ingin memahami cara sesuatu berfungsi dalam pangkalan kod yang besar.

Jeda Aplikasi

Pendekatan dengan titik kunci kaedah berfungsi dengan baik, tetapi berdasarkan andaian bahawa kita mengetahui sesuatu tentang antara muka induk. Bagaimana jika andaian ini salah, atau kita tidak boleh menggunakan pendekatan ini atas sebab lain?

Nah, kita boleh melakukan ini walaupun tanpa titik putus. Klik Butang N, dan semasa aplikasi dikunci, pergi ke IntelliJ IDEA. Daripada menu utama, pilih Jalankan | Tindakan Penyahpepijatan | Program Jeda.

Depurando Aplicativos Inativos

Aplikasi akan digantung, membolehkan kami memeriksa keadaan semasa rangkaian dalam tab Benang & Pembolehubah. Ini memberi kita pemahaman tentang perkara yang sedang dilakukan oleh aplikasi itu. Memandangkan ia dikunci, kami boleh mengenal pasti kaedah penguncian dan mengesannya kembali ke lokasi panggilan.

Pendekatan ini mempunyai beberapa kelebihan berbanding pembuangan benang yang lebih tradisional, yang akan kami bincangkan sebentar lagi. Contohnya, ia menyediakan maklumat tentang pembolehubah dengan cara yang mudah dan membolehkan anda mengawal pelaksanaan program selanjutnya.

Nota: Untuk lebih banyak petua dan helah dengan Program Jeda lihat Nyahpepijat tanpa Titik Putus dan Debugger.godMode().

Lambakan Benang

Akhir sekali, kita boleh menggunakan pembuangan benang, yang bukan sahaja ciri penyahpepijat. Ia tersedia tanpa mengira sama ada anda menggunakan penyahpepijat atau tidak.

Klik Butang N. Semasa aplikasi dikunci, pergi ke IntelliJ IDEA. Daripada menu utama, pilih Jalankan | Tindakan Penyahpepijatan | Dapatkan Thread Dump.

Lihat pada urutan yang tersedia di sebelah kiri, dan di bawah AWT-EventQueue anda akan melihat apa yang menyebabkan masalah.

Depurando Aplicativos Inativos

Kelemahan pembuangan benang ialah ia hanya memberikan gambaran keadaan program pada masa ia diambil. Anda tidak boleh menggunakan pembuangan benang untuk meneroka pembolehubah atau mengawal pelaksanaan program.

Dalam contoh kami, kami tidak perlu menggunakan pembuangan benang. Walau bagaimanapun, saya masih ingin menyebut teknik ini kerana ia boleh berguna dalam kes lain, seperti semasa anda cuba menyahpepijat aplikasi yang dilancarkan tanpa ejen nyahpepijat.

Memahami Masalah

Tidak kira teknik penyahpepijatan, kami tiba di ActionImpl14. Dalam kelas ini, seseorang berhasrat untuk melakukan kerja dalam urutan yang berasingan, tetapi mengelirukan Thread.start() dengan Thread.run(), yang menjalankan kod dalam urutan yang sama dengan kod panggilan.

Penganalisis statik IntelliJ IDEA malah memberi amaran kepada kami tentang perkara ini pada masa reka bentuk:

Depurando Aplicativos Inativos

Kaedah yang melakukan kerja berat (atau tidur berat dalam kes ini) dipanggil pada utas UI dan menyekatnya sehingga kaedah selesai. Itulah sebabnya kami tidak boleh melakukan apa-apa dalam UI untuk beberapa lama selepas mengklik Butang N.

HotSwap

Sekarang kita telah menemui punca pepijat, mari kita selesaikan masalah itu.

Kami boleh menghentikan program, menyusun semula kod dan kemudian menjalankannya semula. Walau bagaimanapun, ia tidak selalunya mudah untuk melipat semula keseluruhan aplikasi hanya demi perubahan kecil.

Mari kita lakukan ini dengan cara yang bijak. Mula-mula, betulkan kod menggunakan pembetulan pantas yang dicadangkan:

Depurando Aplicativos Inativos

Selepas kod sedia, klik Jalankan | Tindakan Penyahpepijatan | Muat Semula Kelas Berubah. Mesej dipaparkan, mengesahkan bahawa kod baharu telah sampai ke VM.

Depurando Aplicativos Inativos

Mari kembali ke apl dan semak. Mengklik Butang N tidak lagi merosakkan apl.

Petua: Ingat bahawa HotSwap mempunyai hadnya. Jika anda berminat dengan keupayaan lanjutan HotSwap, mungkin idea yang baik untuk melihat alat lanjutan seperti DCEVM atau JRebel.

Ringkasan

Menggunakan alasan kami dan beberapa ciri penyahpepijat, kami dapat mencari kod yang menyebabkan UI menjadi beku dalam projek kami. Kami kemudiannya meneruskan untuk membetulkan kod tanpa membuang masa pada penyusunan semula dan penempatan semula, yang boleh memakan masa dalam projek dunia sebenar.

Saya harap anda mendapati teknik yang diterangkan berguna. Beritahu saya apa yang anda fikirkan!

Jika anda berminat dengan lebih banyak artikel yang berkaitan dengan penyahpepijatan dan pemprofilan, lihat beberapa artikel saya yang lain:

  • Debugger.godMode() – Menggodam Aplikasi JVM dengan Debugger
  • Menyelesaikan Masalah Kelambatan Penyahpepijat
  • Nyahpepijat tanpa Titik Putus
  • Apa yang Salah dengan createDirectories()? - Panduan Profil CPU

Atas ialah kandungan terperinci Menyahpepijat Aplikasi Tidak Aktif. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1676
14
Tutorial PHP
1278
29
Tutorial C#
1257
24
Adakah perisian keselamatan syarikat menyebabkan aplikasi gagal dijalankan? Bagaimana cara menyelesaikan masalah dan menyelesaikannya? Adakah perisian keselamatan syarikat menyebabkan aplikasi gagal dijalankan? Bagaimana cara menyelesaikan masalah dan menyelesaikannya? Apr 19, 2025 pm 04:51 PM

Penyelesaian masalah dan penyelesaian kepada perisian keselamatan syarikat yang menyebabkan beberapa aplikasi tidak berfungsi dengan baik. Banyak syarikat akan menggunakan perisian keselamatan untuk memastikan keselamatan rangkaian dalaman. …

Bagaimanakah saya menukar nama kepada nombor untuk melaksanakan penyortiran dan mengekalkan konsistensi dalam kumpulan? Bagaimanakah saya menukar nama kepada nombor untuk melaksanakan penyortiran dan mengekalkan konsistensi dalam kumpulan? Apr 19, 2025 pm 11:30 PM

Penyelesaian untuk menukar nama kepada nombor untuk melaksanakan penyortiran dalam banyak senario aplikasi, pengguna mungkin perlu menyusun kumpulan, terutama dalam satu ...

Bagaimana untuk memudahkan isu pemetaan medan dalam dok sistem menggunakan mapstruct? Bagaimana untuk memudahkan isu pemetaan medan dalam dok sistem menggunakan mapstruct? Apr 19, 2025 pm 06:21 PM

Pemprosesan pemetaan medan dalam dok sistem sering menemui masalah yang sukar ketika melaksanakan sistem dok: bagaimana untuk memetakan medan antara muka sistem dengan berkesan ...

Bagaimana dengan elegan mendapatkan nama pemboleh ubah kelas entiti untuk membina keadaan pertanyaan pangkalan data? Bagaimana dengan elegan mendapatkan nama pemboleh ubah kelas entiti untuk membina keadaan pertanyaan pangkalan data? Apr 19, 2025 pm 11:42 PM

Apabila menggunakan Mybatis-Plus atau Rangka Kerja ORM yang lain untuk operasi pangkalan data, sering diperlukan untuk membina syarat pertanyaan berdasarkan nama atribut kelas entiti. Sekiranya anda secara manual setiap kali ...

Bagaimanakah Idea IntelliJ mengenal pasti nombor port projek boot musim bunga tanpa mengeluarkan log? Bagaimanakah Idea IntelliJ mengenal pasti nombor port projek boot musim bunga tanpa mengeluarkan log? Apr 19, 2025 pm 11:45 PM

Mula musim bunga menggunakan versi IntelliJideaultimate ...

Bagaimana cara menukar objek Java dengan selamat ke array? Bagaimana cara menukar objek Java dengan selamat ke array? Apr 19, 2025 pm 11:33 PM

Penukaran objek dan tatasusunan Java: Perbincangan mendalam tentang risiko dan kaedah penukaran jenis cast yang betul Banyak pemula Java akan menemui penukaran objek ke dalam array ...

Platform e-dagang SKU dan Reka Bentuk Pangkalan Data SPU: Bagaimana untuk mengambil kira kedua-dua atribut yang ditakrifkan oleh pengguna dan produk yang tidak berkesudahan? Platform e-dagang SKU dan Reka Bentuk Pangkalan Data SPU: Bagaimana untuk mengambil kira kedua-dua atribut yang ditakrifkan oleh pengguna dan produk yang tidak berkesudahan? Apr 19, 2025 pm 11:27 PM

Penjelasan terperinci mengenai reka bentuk jadual SKU dan SPU di platform e-dagang Artikel ini akan membincangkan isu reka bentuk pangkalan data SKU dan SPU dalam platform e-dagang, terutamanya bagaimana menangani jualan yang ditentukan pengguna ...

Bagaimana menggunakan penyelesaian cache Redis untuk merealisasikan keperluan senarai kedudukan produk dengan cekap? Bagaimana menggunakan penyelesaian cache Redis untuk merealisasikan keperluan senarai kedudukan produk dengan cekap? Apr 19, 2025 pm 11:36 PM

Bagaimanakah penyelesaian caching Redis menyedari keperluan senarai kedudukan produk? Semasa proses pembangunan, kita sering perlu menangani keperluan kedudukan, seperti memaparkan ...

See all articles