เทคนิคการดีบักที่ใช้ในเบราว์เซอร์
(alan.norbauer.com)เคล็ดลับการใช้ดีบักเกอร์ของเบราว์เซอร์
-
เบรกพอยต์แบบมีเงื่อนไขขั้นสูง
- ขยายความสามารถของเบรกพอยต์แบบมีเงื่อนไขด้วยการใช้ expression ที่มี side effect
- ใช้ logpoint/tracepoint เพื่อบันทึกล็อกลงคอนโซลได้โดยไม่ต้องหยุดการทำงาน
- ใช้
console.countเพื่อนับจำนวนครั้งที่มีการทำงาน - เบราว์เซอร์หลัก ๆ รองรับ logpoint/tracepoint (ข้อมูล ณ เดือนพฤษภาคม 2020)
-
การใช้ Watch window
- ใช้
console.logใน Watch window ได้ - ตั้ง DOM change breakpoint แล้วเพิ่ม watch expression เพื่อรัน expression ในจังหวะที่ DOM เปลี่ยนแปลง
- ใช้
-
การติดตาม call stack
- ติดตาม call stack ของการเรียกฟังก์ชันเพื่อหาการเรียกที่ไม่สอดคล้องกัน
- ใช้
console.traceในเบรกพอยต์แบบมีเงื่อนไขเพื่อตรวจสอบ call stack
-
เปลี่ยนพฤติกรรมของโปรแกรม
- เปลี่ยนพฤติกรรมของโปรแกรมได้ทันทีภายในเบราว์เซอร์
- override พารามิเตอร์ของฟังก์ชันเพื่อปรับพฤติกรรม
-
การทำ performance profiling แบบง่าย
- ใช้ Console Timing API เพื่อวัดเวลาในการรันโค้ด
- ใช้
console.time('label')และconsole.timeEnd('label')เพื่อวัดเวลา
-
การใช้ arity ของฟังก์ชัน
- เปิดใช้งานเบรกพอยต์เฉพาะเมื่อถูกเรียกด้วยจำนวนอาร์กิวเมนต์ตามที่กำหนด
- ใช้เพื่อหาความไม่ตรงกันของจำนวนอาร์กิวเมนต์ตอนเรียกฟังก์ชัน
-
การใช้เวลา
- เปิดใช้งานเบรกพอยต์เฉพาะหลังจากผ่านไประยะหนึ่งนับจากหน้าเว็บโหลดเสร็จ
- ข้ามเบรกพอยต์ในช่วงเวลาหนึ่ง และให้ทำงานเฉพาะหลังจากนั้น
-
การใช้ CSS
- เปิดใช้งานเบรกพอยต์โดยอิงจากค่า CSS ที่คำนวณแล้ว
-
หยุดเฉพาะการเรียกครั้งคู่
- เปิดใช้งานเบรกพอยต์เฉพาะในการรันครั้งที่เป็นเลขคู่
-
หยุดด้วยการสุ่มตัวอย่าง
- เปิดใช้งานเบรกพอยต์เฉพาะกับตัวอย่างการรันแบบสุ่มบางส่วน
-
ไม่ให้หยุดที่บรรทัดที่กำหนด
- ใช้ตัวเลือก "Never Pause Here" เพื่อไม่ให้หยุดที่บรรทัดใดบรรทัดหนึ่ง
-
กำหนด instance ID อัตโนมัติ
- กำหนด ID ที่ไม่ซ้ำกันให้กับแต่ละคลาสอินสแตนซ์โดยอัตโนมัติ
-
สลับเปิดปิดแบบโปรแกรมได้
- ใช้ global boolean เพื่อสลับเปิดปิดเบรกพอยต์แบบมีเงื่อนไขด้วยโปรแกรม
-
การเรียก
monitor()กับคลาส- ใช้คำสั่ง
monitorของ Chrome เพื่อติดตามการเรียกเมธอดของคลาส
- ใช้คำสั่ง
-
การเรียกฟังก์ชันและดีบัก
- เรียก
debuggerจากคอนโซล แล้วเรียกฟังก์ชันเพื่อดีบัก
- เรียก
-
หยุดการทำงานเมื่อ URL เปลี่ยน
- หยุดการทำงานก่อนที่ URL จะเปลี่ยนใน single-page application
-
การดีบักการอ่านพร็อพเพอร์ตี
- เปิดใช้งานเบรกพอยต์ทุกครั้งที่มีการอ่านพร็อพเพอร์ตีของอ็อบเจ็กต์
-
การใช้
copy()- ใช้ Console API
copy()เพื่อคัดลอกข้อมูลไปยังคลิปบอร์ดจากในเบราว์เซอร์โดยตรง
- ใช้ Console API
-
การดีบัก HTML/CSS
- ใช้คอนโซล JS เพื่อวิเคราะห์ปัญหา HTML/CSS
- ตรวจสอบ DOM ขณะที่ปิดใช้งาน JS
- ตรวจสอบองค์ประกอบ DOM ที่แสดงแบบมีเงื่อนไข
- บันทึก DOM snapshot
- มอนิเตอร์องค์ประกอบที่ได้รับโฟกัส
- หาองค์ประกอบที่ใช้ตัวหนา
- อ้างอิงองค์ประกอบที่ถูกเลือกอยู่ในปัจจุบัน
- มอนิเตอร์อีเวนต์
ความเห็นของ GN⁺
ประเด็นสำคัญที่สุดของบทความนี้คือการนำเสนอเทคนิคและเคล็ดลับหลากหลายแบบในการใช้ดีบักเกอร์ของเบราว์เซอร์ เพื่อให้นักพัฒนาสามารถดีบักโค้ดและแก้ปัญหาได้อย่างมีประสิทธิภาพมากขึ้น ข้อมูลเหล่านี้มีประโยชน์มากสำหรับนักพัฒนาซอฟต์แวร์ และน่าสนใจเป็นพิเศษเพราะช่วยประหยัดเวลาได้เมื่อจำเป็นต้องตามหาบั๊กที่ซับซ้อนหรือแก้ปัญหาด้านประสิทธิภาพ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
พัฒนาการของเครื่องมือดีบักที่ฝังมาในเบราว์เซอร์
การใช้คำสั่ง debugger
debugger;) เป็นวิธีเดียวที่เอาชนะสแตกแบบเรียกซ้ำของ Chrome debugger ได้ความยากของการดีบักแบ็กเอนด์ NodeJS
pdb.set_trace()/IEx.pry()อยู่บ่อยครั้งconsole.logซึ่งให้ความรู้สึกดิบและพื้นฐานมากแนะนำ Werkzeug
วิธีเข้าถึงตัวแปรโลคัลของ IIFE
วิธีดีบักผ่านสตริงใน UI
การดีบักด้วย conditional breakpoint
{configOption: true}ให้เป็น{get configOption() { debugger; return true; }}ฟีเจอร์เฉพาะของ Chrome 'Monitor Events for Element'
การไม่มีอยู่ของ API
queryObjectsqueryObjectsที่คืนรายการออบเจ็กต์ทั้งหมดที่ถูกสร้างจาก constructor ที่กำหนดqueryObjects(Function)เพื่อดึงรายการฟังก์ชันทั้งหมดที่อยู่ใน heap ได้ความยากในการใช้ watch variable