Saya mengembangkan aplikasi, dan setiap kali saya menjalankannya, saya menerima pesan:
Sayangnya, MyApp telah berhenti.
Apa yang bisa saya lakukan untuk menyelesaikan ini?
Tentang pertanyaan ini - jelas terinspirasi oleh Apa itu tumpukan jejak, dan bagaimana saya bisa menggunakannya untuk men-debug kesalahan aplikasi saya? , ada banyak pertanyaan yang menyatakan bahwa aplikasi mereka mogok, tanpa rincian lebih lanjut. Pertanyaan ini bertujuan untuk menginstruksikan programmer Android pemula tentang cara mencoba dan memperbaiki masalah mereka sendiri, atau mengajukan pertanyaan yang tepat.
Jawaban:
Jawaban ini menjelaskan proses pengambilan jejak tumpukan. Sudah memiliki jejak stack? Baca di tumpukan jejak di " Apa itu jejak tumpukan, dan bagaimana saya bisa menggunakannya untuk men-debug kesalahan aplikasi saya? "
Masalah
Aplikasi Anda berhenti karena tidak
RuntimeException
ada yang terlempar.Yang paling umum dari ini adalah
NullPointerException
.Bagaimana cara mengatasinya?
Setiap kali aplikasi Android mogok (atau aplikasi Java apa pun dalam hal ini), a
Stack trace
ditulis ke konsol (dalam hal ini, logcat). Jejak tumpukan ini berisi informasi penting untuk menyelesaikan masalah Anda.Android Studio
Di bilah bawah jendela, klik
Logcat
tombol. Atau, Anda dapat menekan alt+ 6. Pastikan emulator atau perangkat Anda dipilih diDevices
panel. Selanjutnya, cobalah untuk menemukan jejak tumpukan, yang ditunjukkan dengan warna merah. Mungkin ada banyak hal yang masuk ke logcat, jadi Anda mungkin perlu sedikit gulir. Cara mudah untuk menemukan jejak stack adalah dengan menghapus logcat (menggunakan recycle bin di sebelah kanan), dan membiarkan aplikasi crash lagi.Saya telah menemukan jejak stack, sekarang apa?
Yay! Anda setengah jalan untuk menyelesaikan masalah Anda.
Anda hanya perlu mencari tahu apa yang sebenarnya membuat aplikasi Anda crash, dengan menganalisis jejak stack.
Baca di tumpukan jejak di " Apa itu jejak tumpukan, dan bagaimana saya bisa menggunakannya untuk men-debug kesalahan aplikasi saya? "
Saya masih tidak bisa menyelesaikan masalah saya!
Jika Anda telah menemukan Anda
Exception
dan baris di mana itu terjadi, dan masih tidak tahu bagaimana cara memperbaikinya, jangan ragu untuk mengajukan pertanyaan di StackOverflow.Cobalah untuk sesingkat mungkin: memposting jejak tumpukan, dan kode yang relevan (misalnya beberapa baris hingga baris yang melempar
Exception
).sumber
Android > Devices|Logcat
dan menambahkan filter baru ( i.imgur.com/145dtkx.png ), dan memfilternya untuk diby Log Message
sini Anda dapat meletakkanFATAL EXCEPTION
( i.imgur.com/HpELhaU .png ) jadi dalam Kotak ini Anda dapat membaca semuaExceptions
yang dilemparkan oleh aplikasi Anda. Dengan ini, Anda tidak perlu menghapus logcat dan melakukan crash lagi. Saya pikir Android Studio juga memiliki opsi ini.Anda dapat menggunakan alat ADB Google untuk mendapatkan
Logcat file
untuk menganalisis masalah.buka
logcat.txt
file dan cari nama aplikasi Anda. Harus ada informasi mengapa gagal, nomor baris, nama kelas, dll.sumber
-d
, jika tidak Anda harus ctrl-C untuk keluar dari logcat. I doadb logcat -v time -d > filename.txt
Pertama, Anda memeriksa titik aplikasi Anda mengalami gangguan (
Unfortunately, MyApp has stopped.
). Untuk ini, Anda dapat menggunakanLog.e("TAG", "Message");
, menggunakan baris ini Anda dapat melihat aplikasi Anda masuk logcat.Setelah itu, Anda menemukan titik mana aplikasi Anda berhenti itu sangat mudah untuk diselesaikan di sisi Anda.
sumber
Periksa saja kesalahan di log kucing.
Anda mendapatkan opsi log cat dari dalam gerhana:
Log kucing mengandung kesalahan.
Selain itu, Anda juga dapat memeriksa kesalahan dengan menjalankan aplikasi dalam mode debug. Pertama-tama atur breakpoint setelah itu dengan melakukan:
sumber
Catatan: Jawaban ini menggunakan Android Studio 2.2.2
Catatan 2: Saya mempertimbangkan bahwa perangkat Anda berhasil terhubung.
Hal pertama yang Anda lakukan ketika aplikasi Anda mogok adalah melihat ke dalam LogCat, di bagian bawah Android Studio ada bilah alat dengan daftar menu:
Klik pada "Android Monitor" (Yang saya garis bawahi pada gambar di atas. ^)
Sekarang, Anda akan mendapatkan sesuatu seperti ini:
Ubah "
Verbose
" menjadi "Error
" Sekarang hanya akan menunjukkan kepada Anda kesalahan yang dicatat. Jangan khawatir tentang semua kesalahan ini (jika Anda mendapatkannya) sekarang.Baik. Sekarang, lakukan apa yang Anda lakukan untuk merusak aplikasi Anda. Setelah aplikasi Anda mogok, buka logcat Anda. Anda harus menemukan crash log baru yang memiliki banyak
at:x.x.x
: danCaused by: TrumpIsPresidentException
misalnya. BukaCaused by:
pernyataan itu di logcat Anda.Selain itu
Caused By:
, harus ada Pengecualian yang terjadi. Dalam kasus saya, ini adalahRuntimeException
dan di bawahnya harus ada garis yang berisi tautan biru seperti:Jika itu
Caused by:
TIDAK memiliki garis dengan teks biru di suatu tempat di bawahnya, maka cari yang lainCaused by:
.Klik tautan biru itu . Ini akan membawa Anda ke tempat masalah terjadi. Dalam kasus saya, itu karena baris ini:
Jadi, sekarang saya tahu mengapa itu menabrak. Itu karena aku melempar pengecualian sendiri. Ini adalah kesalahan yang jelas .
Namun, katakanlah saya mendapat kesalahan lain:
Saya memeriksa logcat saya, saya mengklik tautan biru yang diberikannya kepada saya, dan itu membawa saya ke sini:
Jadi, sekarang saya ingin men-debug. Menurut pertanyaan StackOverflow ini , NullPointerException mengatakan bahwa ada sesuatu
null
.Jadi, mari kita cari tahu apa itu null . Ada dua kemungkinan. Baik
mTextView
itu nol, ataumyString
nol. Untuk mengetahuinya, sebelummTextView.setText(mString)
baris, saya menambahkan dua baris ini:Sekarang, seperti yang kami lakukan sebelumnya (Kami mengubah Verose ke Error), kami ingin mengubah "Error" menjadi "Debug". Karena kita masuk dengan men-debug. Inilah semua metode Log:
Jadi, karena kami menggunakan
Log.d
, kami memeriksa di Debug. Itu sebabnya kami mengubahnya menjadi debug.Pemberitahuan
Log.d
memiliki parameter pertama, dalam kasus kami "AppDebug". Klik menu tarik-turun "No Filters" di kanan atas logcat. Pilih "Edit Konfigurasi Filter", berikan nama pada filter Anda, dan di "Log Tag" masukkan "App Debug". Klik "OK". Sekarang, Anda akan melihat dua baris di logcat:Jadi sekarang kita tahu bahwa mTextView adalah nol.
Saya mengamati kode saya, sekarang saya perhatikan sesuatu.
Saya telah
private TextView mTextView
menyatakan di bagian atas kelas saya. Tapi, saya tidak mendefinisikannya.Pada dasarnya saya lupa melakukan ini di onCreate () saya:
Jadi ITULAH
mTextView
itu batal, karena saya lupa memberi tahu aplikasi saya apa itu. Jadi saya tambahkan baris itu, jalankan aplikasi saya, dan sekarang aplikasi tidak macet.sumber
Munculan ini hanya muncul ketika Anda mendapatkan pengecualian fatal dalam kode Anda yang menghentikan eksekusi aplikasi. Bisa jadi pengecualian
NullPointerException
,OutOfMemoryException
dll.Cara terbaik untuk memeriksa adalah melalui Logcat jika Anda masih mengembangkan aplikasi di Android studio yang merupakan cara cepat untuk membaca jejak stack dan memeriksa penyebab aplikasi.
Jika aplikasi Anda sudah aktif, maka Anda tidak dapat menggunakan logcat . Jadi, untuk itu Anda dapat menerapkan
Crashlytics
untuk memberikan laporan bug tentang pengecualian yang terjadi.sumber
Periksa
Logcat
pesan Anda dan lihatManifest
file Anda . Seharusnya ada sesuatu yang hilang seperti mendefinisikanActivity,
izin Pengguna`, dll.sumber
Anda dapat menggunakan salah satu alat ini:
Saya sarankan untuk menggunakan Android Debug Monitor , itu bagus. Karena eclipse hang ketika terlalu banyak log ada di sana, dan melalui adb logcat filter dan semuanya sulit.
sumber
Anda harus memeriksa
Stack trace
Bagaimana cara melakukannya?
pada IDE Anda Periksa bentuk windows LOGCAT
Jika Anda tidak dapat melihat jendela logcat pergi ke jalan ini dan buka
jika Anda menggunakan Google-Api pergi ke jalur ini
adb logcat> logcat.txt
sumber
Dalam metode showToast () di bawah ini Anda harus melewati parameter lain untuk konteks atau konteks aplikasi dengan melakukannya Anda dapat mencobanya.
sumber
Biarkan saya berbagi analisis Logcat dasar untuk ketika Anda bertemu Angkatan Tutup (ketika aplikasi berhenti bekerja).
DOCS
Alat dasar dari Android untuk mengumpulkan / menganalisis log adalah logcat.
HERE adalah halaman Android tentang logcat
Jika Anda menggunakan Android Studio, Anda juga dapat memeriksa LINK ini .
Menangkap
Pada dasarnya, Anda dapat menangkap logcat secara MANUAL dengan perintah berikut (atau cukup periksa jendela AndroidMonitor di AndroidStudio):
Ada banyak parameter yang dapat Anda tambahkan ke perintah yang membantu Anda memfilter dan menampilkan pesan yang Anda inginkan ... Ini pribadi ... Saya selalu menggunakan perintah di bawah ini untuk mendapatkan stempel waktu pesan:
Anda dapat mengarahkan output ke file dan menganalisisnya di Text Editor.
Menganalisa
Jika aplikasi Anda Menghancurkan, Anda akan mendapatkan sesuatu seperti:
Bagian log ini menunjukkan banyak informasi kepada Anda:
07-09 08:29:13.475
Penting untuk memeriksa ketika masalah terjadi ... Anda mungkin menemukan beberapa kesalahan dalam log ... Anda harus yakin bahwa Anda memeriksa pesan yang tepat :)
com.example.khan.abc
Dengan cara ini, Anda tahu aplikasi mana yang macet (untuk memastikan bahwa Anda memeriksa log tentang pesan Anda)
java.lang.NullPointerException
Kesalahan Pengecualian Pointer NULL
Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference
Anda mencoba memanggil metode
onBackPressed()
dariFragmentActivity
objek. Namun, objek itu adalahnull
ketika Anda melakukannya.Stack Trace: Stack Trace menunjukkan kepada Anda urutan permohonan metode ... Kadang-kadang, kesalahan terjadi pada metode panggilan (dan bukan dalam metode yang dipanggil).
di com.example.khan.abc.AudioFragment $ 1.onClick (AudioFragment.java:125)
Kesalahan terjadi pada file
com.example.khan.abc.AudioFragment.java
,onClick()
metode di dalam pada baris:125
(stacktrace menunjukkan baris bahwa kesalahan terjadi)Itu disebut oleh:
Yang disebut oleh:
yang dipanggil oleh:
dll ....
Gambaran
Ini hanya gambaran umum ... Tidak semua log sederhana, dll ... Hanya untuk membagikan gagasan dan memberikan informasi tingkat awal kepada Anda ...
Saya harap saya bisa membantu Anda ... Salam
sumber
Gunakan LogCat dan coba temukan apa yang menyebabkan aplikasi mogok.
Untuk melihat Logcat jika Anda menggunakan Android Studio lalu Tekan ALT + 6 atau
jika Anda menggunakan Eclipse maka Window -> Open Perspective -> Other - LogCat
Pergi ke LogCat, dari kesalahan pilih menu drop down. Ini akan berisi semua informasi yang diperlukan untuk membantu Anda melakukan debug. Jika itu tidak membantu, poskan LogCat sebagai hasil edit untuk pertanyaan Anda dan seseorang akan membantu Anda.
sumber
Jika aplikasi Anda karena suatu alasan crash tanpa stacktrace yang baik. Coba debug dari baris pertama, dan pergi baris demi baris hingga macet. Maka Anda akan memiliki jawaban, baris mana yang menyebabkan Anda kesulitan. Mungkin Anda kemudian dapat membungkusnya menjadi try catch block dan mencetak output kesalahan.
sumber
Anda juga bisa mendapatkan pesan kesalahan ini sendiri, tanpa jejak tumpukan atau pesan kesalahan lebih lanjut.
Dalam hal ini, Anda perlu memastikan manifes Android Anda dikonfigurasi dengan benar (termasuk penggabungan manifes yang terjadi dari perpustakaan dan aktivitas apa pun yang akan datang dari perpustakaan), dan memberi perhatian khusus pada aktivitas pertama yang ditampilkan dalam aplikasi Anda dalam file manifes Anda. .
sumber
Kecelakaan selama pengembangan
Coba logview alat favorit saya untuk mendapatkan log dan menganalisisnya selama pengembangan.
Pastikan untuk menandai
./logview
dan./lib/logview.jar
sebagai executable ketika berjalan di Linux.Jika Anda tidak menyukainya, ada banyak alternatif pemantau log desktop untuk Android .
Kecelakaan di alam liar
Integrasikan alat pelaporan kerusakan waktu-nyata seperti Firebase Crashlytics untuk mendapatkan stacktrace dari pengecualian yang tidak tertangani yang terjadi pada perangkat pengguna.
Baca Cara Melepaskan Aplikasi Buggy (Dan Langsung untuk Mengisahkannya) untuk mengetahui lebih lanjut tentang cara menangani bug di lapangan.
sumber
Orang membuat kesalahan, dan juga coding.
Ketika pernah
error
terjadi, selalu periksa dengan logcat dengan teks dalam warna merah namun Anda dapat menemukan masalah nyata dalam teks warna biru dengan garis bawah pada teks warna merah tersebut.Pastikan jika Anda membuat yang baru
activity
, selalu menyatakanactivity
dalamAndroidManifest
file.Jika menambahkan Izin, nyatakan juga dalam
AndroidMainifest
file.sumber
Logcat - Untuk memeriksa log dalam fase pengembangan Android Studio
Awalnya kosongkan Logcat dan biarkan aplikasi macet lagi sehingga Anda hanya bisa mendapatkan detail log macet. Anda harus memeriksa jejak Stack
Kesalahan umum selama crash aplikasi seperti:
Untuk mengatasi kesalahan aplikasi crash:
sumber
Pertama, Anda perlu memeriksa di mana dan mengapa aplikasi Anda macet
(Unfortunately, MyApp has stopped.).
dengan bantuanLOG
, Anda dapat mencari tahu apa yang salah.Setelah itu, Anda menemukan titik mana aplikasi Anda berhenti memperbaikinya dari titik Anda.
sumber
Jika Anda tidak memiliki jenis log yang menarik di terminal Anda (atau mereka tidak terkait langsung dengan aplikasi Anda), mungkin masalah Anda disebabkan oleh pustaka asli. Dalam hal ini, Anda harus memeriksa file "batu nisan" di dalam terminal Anda.
Lokasi default untuk file batu nisan tergantung pada setiap perangkat, tetapi jika itu yang terjadi, Anda akan memiliki catatan log:
Tombstone written to: /data/tombstones/tombstone_06
Untuk informasi lebih lanjut, periksa di https://source.android.com/devices/tech/debug .
sumber
Juga menjalankan perintah ini di terminal dapat membantu menemukan masalah:
gradlew build > log.txt 2>details.txt
maka Anda harus pergi ke lokasi file gradlew di baca dua file log di atas.
sumber