Rumah Java javaTutorial Nyahpepijat Aplikasi Tidak Responsif

Nyahpepijat Aplikasi Tidak Responsif

Aug 12, 2024 pm 08:35 PM

Baca dalam bahasa lain: Bahasa Inggeris Português 中文

Terdapat banyak tutorial penyahpepijat yang mengajar anda cara menetapkan titik putus baris, nilai log atau menilai ungkapan. Walaupun pengetahuan ini sahaja memberi anda banyak alatan untuk nyahpepijat aplikasi anda, senario dunia sebenar boleh menjadi lebih rumit dan memerlukan pendekatan yang lebih maju.

Dalam artikel ini, kita akan belajar cara mencari kod yang menyebabkan ranap UI tanpa pengetahuan awal tentang projek dan membetulkan kod yang rosak dengan segera.

Masalahnya

Jika anda ingin mengikuti contoh, mulakan dengan mengkloning 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 ralat, tetapi kesukarannya ialah anda tidak tahu bahagian mana kod yang bertanggungjawab untuk fungsi ini.

Depurar Aplicaciones No Responsivas

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

Depurar Aplicaciones No Responsivas

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 dalam keseluruhan 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().

Depurar Aplicaciones No Responsivas

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

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

Depurar Aplicaciones No Responsivas

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

Jeda aplikasi

Pendekatan dengan titik putus 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 juga boleh melakukannya tanpa titik putus. Klik Butang N dan semasa aplikasi digantung, pergi ke IntelliJ IDEA. Daripada menu utama, pilih Jalankan | Tindakan Penyahpepijatan | Program Jeda.

Depurar Aplicaciones No Responsivas

Aplikasi akan digantung, membolehkan kami memeriksa keadaan semasa urutan dalam tab Benang & Pembolehubah. Ini memberi kita gambaran tentang apa yang dilakukan oleh aplikasi pada masa itu. Memandangkan ia tergantung, kami boleh mengenal pasti kaedah yang menyebabkan sekatan dan mengesannya kembali ke tapak panggilan.

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

Petua: Untuk mendapatkan 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.

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

Terokai urutan yang tersedia di sebelah kiri dan dalam AWT-EventQueue anda akan melihat perkara yang menyebabkan masalah.

Depurar Aplicaciones No Responsivas

Der Nachteil von Thread-Dumps besteht darin, dass sie nur eine Momentaufnahme des Programmstatus zum Zeitpunkt ihrer Erstellung liefern. Sie können Thread-Dumps nicht verwenden, um Variablen zu untersuchen oder die Programmausführung zu steuern.

In unserem Beispiel müssen wir nicht auf einen Thread-Dump zurückgreifen. Ich wollte diese Technik jedoch dennoch erwähnen, da sie in anderen Fällen nützlich sein kann, beispielsweise wenn Sie versuchen, eine Anwendung zu debuggen, die ohne den Debug-Agenten gestartet wurde.

Verstehe das Problem

Unabhängig von der Debugging-Technik kommen wir zu ActionImpl14. In dieser Klasse wollte jemand die Arbeit in einem separaten Thread erledigen, verwechselte jedoch Thread.start() mit Thread.run(), das Code im selben Thread wie der aufrufende Code ausführt.

Der statische Analysator von IntelliJ IDEA warnt uns sogar zur Entwurfszeit davor:

Depurar Aplicaciones No Responsivas

Eine Methode, die viel Arbeit leistet (oder in diesem Fall viel schläft), wird im UI-Thread aufgerufen und blockiert ihn, bis die Methode abgeschlossen ist. Aus diesem Grund können wir in der Benutzeroberfläche eine Zeit lang nichts tun, nachdem wir auf die Schaltfläche N geklickt haben.

HotSwap

Da wir nun die Fehlerursache entdeckt haben, beheben wir das Problem.

Wir könnten das Programm stoppen, den Code neu kompilieren und ihn dann erneut ausführen. Allerdings ist es nicht immer sinnvoll, die gesamte Anwendung erneut bereitzustellen, nur weil eine kleine Änderung vorgenommen wurde.

Lass es uns auf die intelligente Art und Weise tun. Korrigieren Sie zunächst den Code mit der vorgeschlagenen Schnellkorrektur:

Depurar Aplicaciones No Responsivas

Sobald der Code fertig ist, klicken Sie auf Ausführen | Debugging-Aktionen | Geänderte Klassen neu laden. Eine Sprechblase erscheint und bestätigt, dass der neue Code in der VM angekommen ist.

Depurar Aplicaciones No Responsivas

Gehen wir zurück zur App und überprüfen es. Durch Klicken auf die Schaltfläche N stürzt die App nicht mehr ab.

Tipp: Bedenken Sie, dass HotSwap seine Grenzen hat. Wenn Sie an erweiterten HotSwap-Funktionen interessiert sind, ist es möglicherweise eine gute Idee, einen Blick auf erweiterte Tools wie DCEVM oder JRebel zu werfen

Zusammenfassung

Anhand unserer Überlegungen und einiger Debugger-Funktionen konnten wir den Code finden, der einen Absturz der Benutzeroberfläche in unserem Projekt verursacht hat. Anschließend korrigierten wir den Code, ohne Zeit mit der Neukompilierung und Neuverteilung zu verschwenden, was in realen Projekten langwierig sein kann.

Ich hoffe, dass Sie die beschriebenen Techniken nützlich finden. Teilen Sie mir Ihre Meinung mit!

Wenn Sie an weiteren Artikeln zum Thema Debuggen und Profiling interessiert sind, schauen Sie sich einige meiner anderen Artikel an:

  • Debugger.godMode() – Hacken Sie eine JVM-Anwendung mit dem Debugger
  • Fehlerbehebung beim langsamen Debugger
  • Was stimmt nicht mit createDirectories()? - Leitfaden zur CPU-Profilerstellung
  • Debuggen ohne Haltepunkte

Bleiben Sie dran für mehr!

Atas ialah kandungan terperinci Nyahpepijat Aplikasi Tidak Responsif. 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
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 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
1666
14
Tutorial PHP
1273
29
Tutorial C#
1253
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 ...

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 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 ...

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 ...

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 ...

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 ...

See all articles