จะตั้งค่าเบรกพอยต์ JavaScript จากรหัสใน Chrome ได้อย่างไร


687

ฉันต้องการที่จะบังคับให้ดีบัก Chrome เพื่อทำลายบนเส้นรหัสผ่านหรืออื่น ๆ console.break()ที่ใช้การจัดเรียงของแท็กความคิดเห็นบางอย่างเช่นสิ่งที่ต้องการ


46
คุณเคยลองdebugger;หรือใช้จุดหยุดพักปกติในแถบเครื่องมือผู้พัฒนาหรือไม่
diaho

คุณหมายถึงการตั้งเบรกพอยต์จากรหัสตัวเองแทนที่จะตั้งค่าพวกเขาโดยใช้ script watcher ในเครื่องมือสำหรับนักพัฒนาหรือไม่
Faris M

2
หรืออาจจะดีกว่า: ตั้งเบรกพอยต์ใน XHR ใน Chrome
เฟลิกซ์คลิง

9
ไม่ซ้ำกัน "in Chrome" vs "in code" เป็นสองสิ่งที่แตกต่างกันและคำถามนี้ใช้ได้กับสถานการณ์ที่ไม่ใช่ XHR จำนวนมาก ใช่ 1 คำตอบในคำถามอื่น ๆ ตอบคำถามนี้ แต่คนอื่นไม่สามารถใช้ได้ แท้จริงฉัน googled "ตั้ง javascript เบรกพอยต์จากรหัสโครเมี่ยม" และนี่คือผลลัพธ์แรกและคำถามอื่น ๆ ไม่ได้แม้แต่ในหน้าแรก
AaronLS

มีความเป็นไปได้ที่ซ้ำกันของการควบคุมจุดพักในทางโปรแกรมใน Javascript?
Gerardo Lima

คำตอบ:


1161

คุณสามารถใช้debugger;ภายในรหัสของคุณ หากคอนโซลนักพัฒนาซอฟต์แวร์เปิดขึ้นการทำงานจะหยุดลง มันทำงานใน firebug เช่นกัน


8
กลอุบายที่ดีคือการกระตุ้นการดีบั๊กหลังจากไม่กี่วินาที:setTimeout(function(){debugger;}, 3000);
Shahar

30
ตัวจับเวลาใช้กลอุบายทั่วไปหรือไม่? การตรวจสอบ / เหตุผล?
Justus Eapen

4
สิ่งนี้มีประโยชน์มาก หมายเหตุได้debugger;รับการสนับสนุนในเบราว์เซอร์หลักทั้งหมด สำหรับข้อมูลเพิ่มเติม: w3schools.com/jsref/jsref_debugger.asp
ScottyG

16
@ScottyG MDN มีความมันวาวน้อยกว่ามีประโยชน์มากกว่า: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
jpaugh

@JustusEapen ปัญหาคือ Javascript เป็นแบบเธรดเดียวดังนั้นจึงไม่สามารถขัดจังหวะการเรียกใช้โค้ด
Vitruvius

27

ตั้งค่าฟังคลิกปุ่มแล้วโทร debugger;

ตัวอย่าง

$("#myBtn").click(function() {
 debugger;   
});

การสาธิต

http://jsfiddle.net/hBCH5/

ทรัพยากรเกี่ยวกับการดีบักใน JavaScript


1
ที่กำหนดเบรกพอยต์ในตัวจัดการการคลิกอาจไม่ใช่สิ่งที่ OP ต้องการ
ᆼᆺ

@PeterV ฉันจะพบว่ามีประโยชน์ถ้าฉันแค่พยายามเปิดรหัสของฉันไปยังสถานที่ที่อยู่ใกล้กับบล็อกของรหัสที่ฉันกำลังแก้จุดบกพร่อง ... แต่ไม่ต้องการที่จะแก้ปัญหาตลอดเวลา ... แต่ใช่ ถ้าเพียงเพื่อเปิดตัวดีบั๊ก ... นั่นก็คือปุ่มกดสำหรับสิ่งนั้น
Armstrongest

27

นอกจากนี้คุณยังสามารถใช้debug(function)เพื่อทำลายเมื่อfunctionมีการเรียก

การอ้างอิง Command Line API: debug


2
เยี่ยมมาก - ดูเหมือนว่าจะเป็น Chrome เท่านั้นในขณะนี้ แต่นั่นเป็นแพลตฟอร์มหลักของฉัน ตอนนี้ฉันก็ต้องจำไว้ว่าให้หยุดเรียกการตั้งค่าการดีบักทั่วโลกของฉัน "แก้ปัญหา" ...
brichins

การอ้างอิง API ของบรรทัดคำสั่งของ Chrome Debugger มีบางสิ่งที่ค่อนข้างมีประโยชน์ซึ่งฉันไม่ทราบ ขอบคุณ!
ปีเตอร์ต.

16

อย่างที่คนอื่นพูดไปแล้วdebugger;นั่นเป็นวิธีที่จะไป ฉันเขียนสคริปต์ขนาดเล็กที่คุณสามารถใช้จากบรรทัดคำสั่งในเบราว์เซอร์เพื่อตั้งค่าและลบเบรกพอยต์ก่อนการเรียกใช้ฟังก์ชัน: http://andrijac.github.io/blog/2014/01/31/javascript-breakpoint/


8

ในแท็บ "สคริปต์" ไปที่รหัสของคุณ ที่ด้านซ้ายของหมายเลขบรรทัดให้คลิก สิ่งนี้จะกำหนดจุดพัก

ภาพหน้าจอ:

สกรีนช็อตของเบรกพอยต์ในโครเมี่ยม

จากนั้นคุณจะสามารถติดตามจุดพักของคุณภายในแท็บด้านขวา (ดังที่แสดงในภาพหน้าจอ)


41
นี่ไม่ได้ตอบคำถามเขาต้องการที่จะทำมันในโค้ด
robertc

39
xn: "นี่คือภาพคำตอบของฉันย้อนกลับไปเมื่อตอนที่ยังเป็นเด็กเล็ก ๆ ด้วยคะแนนโหวต 0 ตอนนี้มันโตขึ้นแล้ว"
AaronLS

3
หากคุณโหลดสคริปต์ JS ด้วยการเรียก Ajax สคริปต์จะไม่แสดงที่นี่ดังนั้นจึงจำเป็นต้องมีเบรกพอยต์ในรหัส
Petruza

@FlorianMargaine ไม่มีแท็บสคริปต์อีกต่อไป โปรดอัปเดตภาพ
Pacerier

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

7

debugger เป็นคำหลักที่สงวนไว้โดย EcmaScript และให้ความหมายเสริมตั้งแต่ ES5

เป็นผลให้มันสามารถนำมาใช้ไม่เพียง แต่ใน Chrome แต่ยัง Firefox และ Node.js ผ่านnode debug myscript.js

มาตรฐานกล่าวว่า :

วากยสัมพันธ์

DebuggerStatement :
    debugger ;

อรรถศาสตร์

การประเมินการผลิต DebuggerStatement อาจอนุญาตให้มีการนำไปใช้เพื่อทำให้เบรกพอยต์เมื่อทำงานภายใต้ดีบักเกอร์ หากโปรแกรมดีบั๊กไม่อยู่หรือใช้งานคำสั่งนี้จะไม่มีผลที่สังเกตได้

การผลิต DebuggerStatement: ดีบักเกอร์ มีการประเมินดังนี้:

  1. หากเครื่องมืออำนวยความสะดวกในการแก้ไขข้อบกพร่องที่นำมาใช้นั้นมีอยู่และเปิดใช้งานอยู่
    1. ทำการดำเนินการแก้ไขข้อบกพร่องที่กำหนดไว้ในการใช้งาน
    2. ให้ผลลัพธ์เป็นการนำไปใช้งานที่กำหนดไว้เสร็จสมบูรณ์มูลค่า
  2. อื่น
    1. ให้ผลลัพธ์เป็น (ปกติว่างเปล่าว่างเปล่า)
  3. ส่งคืนผลลัพธ์

ไม่มีการเปลี่ยนแปลงใน ES6


3

เป็นไปได้และมีหลายเหตุผลที่คุณอาจต้องการทำเช่นนี้ ตัวอย่างเช่นการดีบักลูป infinite javascript ใกล้กับจุดเริ่มต้นของการโหลดหน้าเว็บซึ่งจะหยุดชุดเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ Chrome (หรือ firebug) จากการโหลดอย่างถูกต้อง

ดูส่วนที่ 2 จาก

http://www.laurencegellert.com/2012/05/the-three-ways-of-setting-breakpoints-in-javascript/

หรือเพียงแค่เพิ่มบรรทัดที่มีคำว่าดีบั๊กในรหัสของคุณที่จุดทดสอบที่ต้องการ


3

เบรกพอยต์: -

เบรกพอยต์จะหยุดดำเนินการและให้คุณตรวจสอบค่า JavaScript

หลังจากตรวจสอบค่าแล้วคุณสามารถเรียกใช้รหัสต่อได้ (โดยทั่วไปจะมีปุ่มเล่น)

ดีบักเกอร์: -

ตัวดีบั๊ก หยุดการทำงานของ JavaScript และเรียกใช้ฟังก์ชันการดีบัก

คำสั่งดีบักเกอร์หยุดการทำงานชั่วคราว แต่ไม่ได้ปิดไฟล์ใด ๆ หรือล้างตัวแปรใด ๆ

Example:-
function checkBuggyStuff() {
  debugger; // do buggy stuff to examine.
};


2

การดีบักโค้ด JavaScript มีหลายวิธี สองวิธีต่อไปนี้ใช้กันอย่างแพร่หลายในการดีบัก JavaScript ผ่านรหัส

  1. การใช้console.log()เพื่อพิมพ์ค่าในคอนโซลของเบราว์เซอร์ (สิ่งนี้จะช่วยให้คุณเข้าใจค่าในบางจุดของรหัสของคุณ)

  2. คำหลักดีบักเกอร์ เพิ่มdebugger;ไปยังตำแหน่งที่คุณต้องการตรวจแก้จุดบกพร่องและเปิดคอนโซลนักพัฒนาซอฟต์แวร์ของเบราว์เซอร์และไปที่แท็บแหล่งที่มา

สำหรับเครื่องมือเพิ่มเติมและวิธีที่คุณแก้ปัญหารหัส JavaScript, จะได้รับในการเชื่อมโยงนี้โดย W3School


1
+1 และการใช้ console.log ยังมีประโยชน์ในการค้นหารหัสของคุณเพราะโดยปกติแล้วไฟล์ / บรรทัด # จะแสดงถัดจากข้อความและคุณสามารถคลิกเพื่อเปิดรหัสของคุณในโปรแกรมดีบั๊กตั้งจุดพัก ฯลฯ
John Henckel

0

ฉันจะไม่แนะนำdebugger;ถ้าคุณต้องการที่จะฆ่าและหยุดรหัสจาวาสคริปต์เนื่องจากdebugger;จะเป็นการชั่วคราวหยุดรหัสจาวาสคริปต์ของคุณและไม่หยุดมันอย่างถาวร

หากคุณต้องการฆ่าและหยุดรหัส javascript ตามคำสั่งของคุณอย่างถูกต้องให้ใช้สิ่งต่อไปนี้:

throw new Error("This error message appears because I placed it");

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