JavaScript: Apakah ada cara agar Chrome dapat mengatasi semua kesalahan?

258

Saya mencari yang setara di Chrome dengan fungsi "break on all error" dari Firebug. Di tab Skrip, Chrome memiliki "jeda pada semua pengecualian", tetapi ini tidak sama dengan memecah semua kesalahan.

Misalnya, saat memuat halaman dengan kode berikut, saya ingin Chrome memutuskannya foo.bar = 42. Sebaliknya, bahkan ketika mengaktifkan "Jeda pada semua pengecualian", saya tidak mendapatkan hasil yang diharapkan.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <script type="text/javascript">

            function doError() {
                foo.bar = 42;
            }

            window.onload = function() {
                try {
                    doError();
                } catch (e) {
                    console.log("Error", e);
                }
            }
        </script>
    </head>
    <body>
    </body>
</html>

Anda dapat mencoba kode yang disisipkan di atas pada halaman ini atau menggunakan jsFiddle ini .

avernet
sumber
Jenis kesalahan apa lagi yang Anda pikirkan?
Matthew Crumley
1
Kesalahan apa pun, katakan: referensi ke variabel yang tidak ditentukan (seperti di console.log(gaga)) atau ke properti yang tidak ditentukan (seperti di window.foo.bar).
avernet
2
Itu harus membuang pengecualian. Opsi "jeda pada pengecualian" berfungsi untuk saya. Satu-satunya kesalahan yang saya pikir tidak akan berhasil adalah kesalahan sintaks, tetapi itu terjadi sebelum kode dieksekusi.
Matthew Crumley
1
Ya, saya sedang mencoba ini sekarang, dan sepertinya rusak dimana kesalahannya. Saya telah melakukan ini beberapa hari yang lalu, dan bukannya memecahkan di mana kesalahan dalam kode, itu melanggar di mana pengecualian yang disebabkan oleh kesalahan itu tertangkap, jauh di atas tumpukan. Sosok pergi!
avernet

Jawaban:

210

Sunting: Tautan asli yang saya jawab sekarang tidak valid . URL yang lebih baru adalah https://developers.google.com/web/tools/chrome-devtools/javascript/add-breakpoints#exceptions pada 2016-11-11.

Saya menyadari pertanyaan ini memiliki jawaban, tetapi tidak lagi akurat. Gunakan tautan di atas ^


(tautan diganti dengan yang diedit di atas) - Anda sekarang dapat mengaturnya untuk memecah semua pengecualian atau hanya yang tidak ditangani. (Perhatikan bahwa Anda harus berada di tab Sumber untuk melihat tombol.)

Chrome juga menambahkan beberapa kemampuan breakpoint lain yang sangat berguna sekarang, seperti memecah perubahan DOM atau acara jaringan.

Biasanya saya tidak akan menjawab kembali pertanyaan, tetapi saya sendiri memiliki pertanyaan yang sama, dan saya menemukan jawaban yang sekarang salah, jadi saya pikir saya akan memasukkan informasi ini ke sini untuk orang yang datang kemudian dalam mencari. :)

Brian Arnold Sinclair
sumber
1
Brian, terima kasih, ini memang berfungsi sekarang. Fitur ini sudah tersedia pada bulan Februari tahun lalu, ketika saya memposting ini, tetapi itu tidak berfungsi dengan baik, sementara itu tampaknya berfungsi dengan baik sekarang. Terima kasih untuk umpan baliknya.
avernet
Tombol yang dirujuk oleh tautan Anda tampaknya tidak ada lagi (setidaknya di rilis dev channel Chrome saat ini). Tidak yakin bagaimana melakukan ini lagi.
Andrey Fedorov
2
Halo Andrey, saya sedang melihat Chrome Canary dan saya masih melihat tombol di sana. Ini adalah tombol keempat dari kiri, seperti yang diperlihatkan di d.pr/i/DHwT - klik sekali dan masuk ke Jeda pada Semua Pengecualian, di mana klik kedua akan membawanya ke Jeda pada Pengecualian yang Tidak Berhasil. Klik ketiga kembali ke default tidak berhenti.
Brian Arnold Sinclair
Tautannya rusak aku takut :(
Rick
1
Permintaan maaf karena tidak melihat komentar lebih awal! Tampaknya developers.google.com/web/tools/chrome-devtools/javascript/… memiliki intisari dari konten sebelumnya. Saya akan mengubah jawaban asli juga, jika saya bisa.
Brian Arnold Sinclair
298

Saya mendapat kesulitan untuk mendapatkannya sehingga saya memposting gambar yang menunjukkan pilihan berbeda:

Chrome 75.0.3770.142 [29 Juli 2018]

UI yang sangat mirip sejak setidaknya Chrome 38.0.2125.111 [11 Desember 2014]

Di tab Sources:

masukkan deskripsi gambar di sini

Ketika tombol diaktifkan, Anda dapat Pause On Caught Exceptionsdengan kotak centang di bawah ini: masukkan deskripsi gambar di sini


Versi sebelumnya

Chrome 32.0.1700.102 [03 feb 2014]

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini

Chrome 27.0.1453.93 Stabil

Opsi debug

Maxence
sumber
22
Saya harus memuji Facebook karena menautkan ini secara langsung di dokumen mereka. +1
jimm101
1
Juga untuk orang-orang untuk memperhatikan, tombol-tombol hanya akan menyembunyikan jika bilah samping tidak diperluas, tanpa indikasi mereka ada di sana.
Eric Majerus
17

Ini sekarang didukung di Chrome oleh tombol "Jeda pada semua pengecualian".

Untuk mengaktifkannya:

  • Buka tab "Sumber" di Alat Pengembang Chrome
  • Klik tombol "Jeda" di bagian bawah jendela untuk beralih ke "Jeda pada semua mode pengecualian".

Perhatikan bahwa tombol ini memiliki banyak status. Terus klik tombol untuk beralih

  • "Jeda pada semua pengecualian" - tombol berwarna biru muda
  • "Jeda pada pengecualian tanpa tertangkap", tombolnya berwarna ungu .
  • "Jangan berhenti pada pengecualian" - tombol berwarna abu - abu
Taman Brad
sumber
1

Hampir semua kesalahan akan menghasilkan pengecualian. Satu-satunya kesalahan yang saya pikir tidak akan bekerja dengan opsi "pause on exception" adalah kesalahan sintaks, yang terjadi sebelum salah satu kode dieksekusi, jadi tidak ada tempat untuk berhenti sebentar dan tidak ada kode yang akan berjalan.

Tampaknya, Chrome tidak akan berhenti pada pengecualian jika berada di dalam blok uji coba. Itu hanya berhenti pada pengecualian yang tidak tertangkap. Saya tidak tahu cara mengubahnya.

Jika Anda hanya perlu tahu garis apa yang terjadi pada pengecualian (maka Anda dapat mengatur breakpoint jika pengecualian dapat direproduksi), Errorobjek yang diberikan ke blok tangkap memiliki stackproperti yang menunjukkan di mana pengecualian terjadi.

Matthew Crumley
sumber
Matthew, saya "mereproduksi" sesuatu yang mirip dengan kasus saya (lihat pertanyaan yang diperbarui). Entah bagaimana, saya tidak mendapatkan debugger untuk memecahkan kesalahan itu. Apakah Anda tahu mengapa ini tidak berhasil dengan Chrome (tidak dengan Firebug saat mengaktifkan "break on all errors").
avernet
@ Madhew, saya membuat jawaban lain dengan mengatakan ini tidak mungkin, dan menandainya sebagai jawaban. Jika Anda atau orang lain menemukan solusi, saya akan mengubah penanda.
avernet
1

Sayangnya, Alat Pengembang di Chrome tampaknya tidak dapat "menghentikan semua kesalahan", seperti yang dilakukan Firebug.

avernet
sumber
Cukup klik pada Tombol Jeda SATU KALI (itu akan menjadi warna Biru) dan jangan tandai opsi Jeda Pada Pengecualian Tertangkap. Itu semua, itu akan Jeda hanya pada kesalahan.
Roy Shoa