JavaScript: มีวิธีที่จะทำให้ Chrome หยุดข้อผิดพลาดทั้งหมดหรือไม่


258

ฉันกำลังมองหาสิ่งที่เทียบเท่าใน Chrome เพื่อฟังก์ชั่น "หยุดข้อผิดพลาดทั้งหมด" ของ Firebug ในแท็บสคริปต์ Chrome มี "หยุดชั่วคราวทุกข้อยกเว้น" แต่นี่ก็ไม่เหมือนกับการทำลายข้อผิดพลาดทั้งหมด

ยกตัวอย่างเช่นเมื่อโหลดหน้าเว็บที่มีรหัสต่อไปนี้ผมอยากจะทำลาย Chrome foo.bar = 42บนเส้น แม้ว่าจะเปิดใช้งาน "หยุดชั่วคราวในทุกข้อยกเว้น" แต่ฉันไม่ได้รับผลลัพธ์ตามที่คาดหวัง

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

คุณสามารถลองวางโค้ดด้านบนในหน้านี้หรือใช้jsFiddleนี้


คุณคิดว่ามีข้อผิดพลาดประเภทใด
Matthew Crumley

1
ข้อผิดพลาดใด ๆ พูด: การอ้างอิงถึงตัวแปรที่ไม่ได้กำหนด (ในconsole.log(gaga)) หรือคุณสมบัติที่ไม่ได้กำหนด (ในwindow.foo.bar)
avernet

2
สิ่งเหล่านั้นควรโยนข้อยกเว้น ตัวเลือก "หยุดชั่วคราวยกเว้น" เหมาะสำหรับฉัน ข้อผิดพลาดเดียวที่ฉันคิดได้ว่าไม่สามารถใช้ได้คือข้อผิดพลาดทางไวยากรณ์ แต่เกิดขึ้นก่อนที่รหัสจะถูกดำเนินการ
Matthew Crumley

1
ใช่ฉันพยายามแล้วและดูเหมือนจะผิดพลาด ฉันได้ทำสิ่งนี้เมื่อไม่กี่วันที่ผ่านมาและแทนที่จะทำลายข้อผิดพลาดที่อยู่ในรหัสมันก็พังที่ข้อยกเว้นที่เกิดจากข้อผิดพลาดที่ถูกจับได้เพิ่มขึ้นสแต็ค ไปคิด!
avernet

คำตอบ:


210

แก้ไข: การเชื่อมโยงเดิมผมตอบมีอยู่ในขณะนี้ไม่ถูกต้องได้โดยง่าย URL ใหม่จะhttps://developers.google.com/web/tools/chrome-devtools/javascript/add-breakpoints#exceptionsณ 2016/11/11

ฉันรู้ว่าคำถามนี้มีคำตอบ แต่มันไม่ถูกต้องอีกต่อไป ใช้ลิงค์ด้านบน ^


(ลิงก์ถูกแทนที่ด้วยการแก้ไขด้านบน) - ขณะนี้คุณสามารถตั้งค่าให้ทำลายข้อยกเว้นทั้งหมดหรือเพียงแค่การจัดการที่ไม่ได้จัดการ (โปรดทราบว่าคุณต้องอยู่ในแท็บSourcesเพื่อดูปุ่ม)

Chrome ยังได้เพิ่มความสามารถในการเบรกพอยต์อื่น ๆ ที่มีประโยชน์จริง ๆ เช่นการเปลี่ยนแปลง DOM หรือกิจกรรมเครือข่าย

โดยปกติฉันจะไม่ตอบคำถามอีกครั้ง แต่ฉันมีคำถามเดียวกันด้วยตัวเองและฉันพบคำตอบที่ไม่ถูกต้องในตอนนี้ดังนั้นฉันจึงคิดว่าฉันจะใส่ข้อมูลนี้ไว้ที่นี่เพื่อคนที่มาค้นหาในภายหลัง :)


1
Brian ขอบคุณค่ะตอนนี้ใช้งานได้จริง คุณลักษณะนี้มีให้บริการในเดือนกุมภาพันธ์ของปีที่แล้วเมื่อฉันโพสต์สิ่งนี้ แต่มันทำงานไม่ถูกต้องในขณะที่ดูเหมือนว่าจะทำงานได้ดีในขณะนี้ ขอบคุณสำหรับความคิดเห็น.
avernet

ปุ่มที่อ้างถึงโดยลิงก์ของคุณดูเหมือนจะไม่อยู่ที่นั่นอีกแล้ว (อย่างน้อยในรุ่น dev ช่อง Chrome ปัจจุบัน) ไม่แน่ใจวิธีการทำเช่นนี้อีกครั้ง
Andrey Fedorov

2
สวัสดี Andrey ฉันกำลังดู Chrome Canary และฉันยังเห็นปุ่มอยู่ เป็นปุ่มที่สี่จากซ้ายดังแสดงในd.pr/i/DHwT - คลิกหนึ่งครั้งและจะเข้าสู่หยุดชั่วคราวในข้อยกเว้นทั้งหมดซึ่งการคลิกครั้งที่สองจะนำไปที่หยุดชั่วคราวในข้อยกเว้นที่ไม่ถูกบันทึก การคลิกครั้งที่สามจะกลับสู่ค่าเริ่มต้นที่ไม่หยุดชั่วคราว
Brian Arnold Sinclair เมื่อ

ลิงก์ใช้งานไม่ได้ฉันกลัว :(
ริ

1
ขออภัยที่ไม่เห็นความคิดเห็นเร็วกว่านี้! ดูเหมือนว่าdevelopers.google.com/web/tools/chrome-devtools/javascript/…จะมีเนื้อหาจากก่อนหน้านี้ ฉันจะแก้ไขคำตอบเดิมด้วยถ้าทำได้
Brian Arnold Sinclair

298

ฉันมีปัญหาในการรับมันดังนั้นฉันโพสต์รูปภาพที่แสดงตัวเลือกต่าง ๆ :

Chrome 75.0.3770.142 [29 กรกฎาคม 2018]

UI ที่คล้ายกันมากอย่างมากตั้งแต่อย่างน้อย Chrome 38.0.2125.111 [11 ธันวาคม 2557]

ในแท็บSources:

ป้อนคำอธิบายรูปภาพที่นี่

เมื่อเปิดใช้งานปุ่มคุณสามารถPause On Caught Exceptionsทำเครื่องหมายในช่องด้านล่าง: ป้อนคำอธิบายรูปภาพที่นี่


รุ่นก่อนหน้า

Chrome 32.0.1700.102 [03 กุมภาพันธ์ 2014]

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่

Chrome 27.0.1453.93เสถียร

ตัวเลือกการแก้ปัญหา


22
ฉันต้องสรรเสริญ Facebook สำหรับการเชื่อมโยงกับสิ่งนี้โดยตรงในเอกสารของพวกเขา +1
jimm101

1
นอกจากนี้สำหรับคนที่จะต้องทราบปุ่มก็จะซ่อนถ้าแถบด้านข้างไม่ได้ขยายโดยไม่มีการบ่งชี้
Eric Majerus

17

ตอนนี้ได้รับการสนับสนุนใน Chrome ด้วยปุ่ม "หยุดชั่วคราวทุกข้อยกเว้น"

วิธีเปิดใช้งาน:

  • ไปที่แท็บ "แหล่งที่มา" ในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Chrome
  • คลิกปุ่ม "หยุดชั่วคราว" ที่ด้านล่างของหน้าต่างเพื่อเปลี่ยนเป็น "หยุดชั่วคราวในโหมดการยกเว้นทั้งหมด"

โปรดทราบว่าปุ่มนี้มีหลายสถานะ คลิกปุ่มนั้นต่อไปเรื่อย ๆ

  • "หยุดทุกข้อยกเว้น" - ปุ่มเป็นสีฟ้าอ่อน
  • "หยุดชั่วคราวในข้อยกเว้น uncaught" ปุ่มเป็นสีม่วง
  • "อย่าหยุดชั่วคราวยกเว้น" - ปุ่มเป็นสีเทา

1

ข้อผิดพลาดใด ๆ จะทำให้เกิดข้อยกเว้น ข้อผิดพลาดเดียวที่ฉันคิดว่าจะใช้ไม่ได้กับตัวเลือก "หยุดชั่วคราวในข้อยกเว้น" คือข้อผิดพลาดทางไวยากรณ์ซึ่งเกิดขึ้นก่อนที่โค้ดใด ๆ จะถูกเรียกใช้ดังนั้นจึงไม่มีที่ให้หยุดชั่วคราวและไม่มีรหัสใดทำงาน

เห็นได้ชัดว่า Chrome จะไม่หยุดยกเว้นหากอยู่ในช่วงทดลองใช้ มันหยุดในข้อยกเว้นที่ไม่ได้ตรวจสอบเท่านั้น ฉันไม่รู้วิธีการเปลี่ยนแปลง

หากคุณเพียงแค่ต้องรู้ว่าบรรทัดข้อยกเว้นเกิดอะไรขึ้น (จากนั้นคุณสามารถตั้งค่าเบรกพอยต์หากข้อยกเว้นสามารถทำซ้ำได้) Errorวัตถุที่กำหนดให้กับ catch block มีstackคุณสมบัติที่แสดงว่ามีข้อยกเว้นเกิดขึ้น


แมทธิวฉัน "ทำซ้ำ" สิ่งที่คล้ายกับกรณีที่ฉันมี (ดูคำถามที่ปรับปรุง) อย่างใดฉันไม่ได้รับการดีบักเกอร์เพื่อทำลายข้อผิดพลาด คุณมีความคิดว่าทำไมสิ่งนี้จึงไม่สามารถใช้งานกับ Chrome ได้ (ใช้กับ Firebug เมื่อเปิดใช้งาน "หยุดข้อผิดพลาดทั้งหมด")
avernet

@Mathhew ฉันได้สร้างคำตอบอื่นโดยบอกว่ามันเป็นไปไม่ได้และทำเครื่องหมายว่าเป็นคำตอบ หากคุณหรือคนอื่นหาวิธีแก้ไขฉันจะเปลี่ยนเครื่องหมาย
avernet

1

น่าเสียดายที่เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ใน Chrome ดูเหมือนจะไม่สามารถ "หยุดข้อผิดพลาดทั้งหมด" ได้เช่นเดียวกับ Firebug


เพียงคลิกที่ปุ่มหยุดชั่วคราวหนึ่งครั้ง (มันจะเป็นสีฟ้า) และอย่าทำเครื่องหมายตัวเลือกหยุดชั่วคราวในข้อยกเว้นที่ถูกจับ ซึ่งทั้งหมดนั้นจะหยุดชั่วคราวเมื่อเกิดข้อผิดพลาดเท่านั้น
Roy Shoa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.