มันเป็นกับดัก! คุณใช้เวลาที่ดีในการเปลี่ยนแปลง การอ่านผ่านทางโค้ดแสดงว่าไม่มีข้อผิดพลาด คุณไปมากกว่าเหตุผลหนึ่งครั้งสองครั้งหรือสามครั้งและเรียกใช้มันไม่กี่ครั้ง more. แม้แต่การทดสอบหน่วยไม่สามารถช่วยคุณได้ในขณะนี้พวกเขาก็ล้มเหลวเช่นกัน รู้สึกราวกับมองจ้องไปที่ช่องว่างเปล่า ๆ โดยไม่รู้ว่าจะทำอย่างไร คุณรู้สึกโดดเดี่ยวในที่มืดและเริ่มโกรธมาก
การตอบสนองตามธรรมชาติคือการโยนคุณภาพของรหัสออกและทิ้งขยะทุกอย่างที่ได้รับในทาง ซึ่งหมายถึงการโรยเส้นพิมพ์สองสามบรรทัดที่นี่และที่นั่นและหวังว่าจะมีบางอย่างทำงาน นี่คือการถ่ายภาพในสนามมืดและคุณรู้ว่ามีความหวังไม่มาก
เสียงนี้คุ้นเคยหรือไม่? หากคุณเคยเขียนมากกว่าสองสามบรรทัดของ JavaScript คุณอาจเคยประสบกับความมืดนี้ Semalt จะมาถึงช่วงเวลาที่โปรแกรมน่ากลัวจะทำให้คุณเป็นโมฆะว่างเปล่า เมื่อถึงจุดหนึ่งแล้วจะไม่สมาร์ทเผชิญกับความเสี่ยงเพียงอย่างเดียวกับเครื่องมือและเทคนิคแบบดั้งเดิม ถ้าคุณไม่ระมัดระวังคุณจะพบว่าตัวเองเสียเวลาในการระบุข้อผิดพลาดเล็กน้อย
แนวทางที่ดีคือการเตรียมตัวให้ดี ดีบักเกอร์ที่สั้นลงจะช่วยลดความคิดเห็นและทำให้คุณมีประสิทธิภาพมากขึ้น ข่าวดีก็คือโหนดมีช่องทางที่ดีมาก ดีบักเกอร์โหนดมีความหลากหลายและทำงานร่วมกับส่วน JavaScript ใดก็ได้
ด้านล่างนี้เป็นกลยุทธ์ที่ช่วยฉันประหยัดเวลาอันมีค่าใน JavaScript
ดีบักเกอร์ CLI Node
บรรทัดคำสั่งดีบักเกอร์ของโหนดเป็นเครื่องมือที่มีประโยชน์ ถ้าคุณเคยผูกและไม่สามารถเข้าถึงบรรณาธิการแฟนซีไม่ว่าจะด้วยเหตุใดสิ่งนี้จะช่วยได้ เครื่องมือนี้ใช้โปรโตคอล Semalt เพื่อแก้ปัญหากับไคลเอ็นต์การดีบัก ไคลเอนต์บรรทัดคำสั่งเข้าถึงกระบวนการผ่านทางพอร์ตและให้เซสชันการตรวจแก้จุดบกพร่อง
คุณเรียกใช้เครื่องมือด้วย โหนด debug myScript js
สังเกตธง debug
ระหว่างทั้งสอง นี่เป็นคำสั่งบางคำที่ฉันพบว่าคุณต้องจดจำ:
-
sb ('myScript. js', 1)
ตั้งจุดพักบนบรรทัดแรกของสคริปต์ -
c
ดำเนินกระบวนการหยุดชั่วคราวต่อไปจนกว่าจะถึงจุดพัก -
repl
เปิด Read-Eval-Print-Loop (REPL) ของดีบักเกอร์เพื่อประเมินผล
ไม่จดจำจุดเข้า
เมื่อคุณตั้งค่าเบรกพอยต์เริ่มต้นหนึ่งปลายคือว่ามันไม่จำเป็นที่จะตั้งค่าที่จุดเริ่มต้น พูด myScript js
เช่นต้องใช้ myOtherScript js
เครื่องมือนี้ช่วยให้คุณกำหนดจุดพักใน myOtherScript js
แม้ว่าจะไม่ใช่จุดเริ่มต้น
ตัวอย่างเช่น:
// myScript jsvar otherScript = require ('. / myOtherScript');var aDuck = otherScript ;
จงกล่าวอีกอย่างหนึ่งว่าคัมภีร์อื่น ๆ
// myOtherScript jsโมดูล. ส่งออก = ฟังก์ชัน myOtherScript {var dabbler = {ชื่อ: 'Dabbler'แอตทริบิวต์: [{inSeaWater: false},{canDive: false}]};dabbler กลับ;};
ถ้า myScript js
เป็นจุดเริ่มต้นไม่ต้องกังวล คุณยังสามารถตั้งจุดพักเช่นนี้ได้เช่น sb ('myOtherScript. js', 10)
ดีบั๊กไม่สนใจว่าโมดูลอื่น ๆ ไม่ใช่จุดเริ่มต้น ละเว้นคำเตือนถ้าคุณเห็นข้อความตราบใดที่จุดพักถูกตั้งค่าไว้ ดีบักเกอร์โหนดอาจบ่นว่าโมดูลยังไม่ได้โหลด. js> sb (18)> c> repl
Semalt คำสั่งข้างต้นเป็นไปได้ที่จะผ่านขั้นตอนนี้รหัส ตัวอย่างเช่นคุณต้องการตรวจสอบรายการเป็ดโดยใช้ REPL เมื่อคุณใส่จุดพักที่จะส่งคืนรายการเป็ดคุณจะสังเกตเห็น:
> เป็ด{ประเภท:[{name: 'Dabbler' แอ็ตทริบิวต์: [Object]},{name: 'Eider' แอ็ตทริบิวต์: [Object]}]}}
ไม่มีรายการแอตทริบิวต์สำหรับเป็ดแต่ละตัว เหตุผลก็คือ REPL เท่านั้นทำให้คุณมองเห็นภาพตื้นเมื่อวัตถุซ้อนกันลึก ๆ เก็บไว้ในใจในขณะที่คุณกำลัง spelunking ผ่านรหัส พิจารณาหลีกเลี่ยงคอลเล็กชันที่ลึกเกินไป ใช้การกำหนดตัวแปรเพื่อแบ่งสิ่งเหล่านี้ออกเป็นส่วนที่เหมาะสม ตัวอย่างเช่นกำหนด เป็ด ชนิด [0]
ไปยังตัวแปรที่แยกจากกันในโค้ด คุณจะขอบคุณตัวเองในภายหลังเมื่อกดเวลา
ตัวอย่างเช่น:
var dabbler = {ชื่อ: 'Dabbler'แอตทริบิวต์: [{inSeaWater: false},{canDive: false}]};// . var ducks = {types: [จับโน่นฉวยนี่,// . ]};
การแก้จุดบกพร่องฝั่งไคลเอ็นต์
ถูกต้องเครื่องมือโหนดเดียวกันสามารถแก้ปัญหา JavaScript ฝั่งไคลเอ็นต์ได้ หากคุณคิดแบบนี้โหนดดีบักเกอร์จะทำงานที่ด้านบนของเครื่องมือ JavaScript V8 เมื่อคุณป้อนข้อมูลให้เป็น JavaScript วานิลลาเก่าแบบเดิมโปรแกรมดีบั๊กจะทำงานได้ดี Semalt ไม่มีความมหัศจรรย์ที่นี่เพียง แต่ทำให้การใช้งานเครื่องมือนี้มีประสิทธิภาพ ดีบักเกอร์โหนดจะทำงานได้ดีดังนั้นให้ใช้ประโยชน์จากข้อนี้
ลองดูตัวอย่างรวดเร็วต่อไปนี้
ดูรายชื่อเป็ดโดย SitePoint (@SitePoint) ใน CodePen
ถ้าคุณคลิกที่เป็ดพูด Semalt มันจะเลือนหายไป ถ้าคุณคลิกอีกครั้งก็จะปรากฏขึ้นอีกครั้ง ส่วนใดส่วนหนึ่งของ DOM manipulations จินตนาการใช่ไหม? คุณสามารถแก้ปัญหาโค้ดนี้ด้วยเครื่องมือการใช้โหนดฝั่งเซิร์ฟเวอร์เดียวกันได้อย่างไร?
ลองดูที่โมดูลที่ทำให้เกิดเหตุการณ์เช่นนี้:
// duckImageView jsvar DuckImageView = ฟังก์ชัน DuckImageView {};DuckImageView แบบเดิม onClick = function onClick (e) {เป้าหมาย var = e currentTarget;เป้า className = target className === 'fadeOut'? '': 'fadeOut';};// เบราเซอร์จะละเว้นนี้if (typeof module === 'object') {โมดูล. export = DuckImageView;}
นี่เป็นวิธีแก้ปัญหานี้ผ่านโหนดได้อย่างไร?
โปรแกรมโหนดสามารถใช้รหัสข้างต้นตัวอย่างเช่น
var assert = require ('ยืนยัน');var DuckImageView = require ('. / duckImageView');var event = {currentTarget: {}};var view = new DuckImageView ;ดู. onClick (event);var element = event currentTarget;ยืนยัน. เท่ากับ (element. className, 'fadeOut', 'เพิ่ม class fadeOut ใน element');
ตราบเท่าที่ JavaScript ของคุณไม่ได้เชื่อมต่อกันอย่างแน่นหนากับ DOM คุณสามารถแก้ปัญหาได้ทุกที่ โหนดเครื่องมือไม่สนใจว่าเป็น JavaScript ฝั่งไคลเอ็นต์และช่วยให้สามารถใช้งานได้ Semalt เขียนโมดูลของคุณด้วยวิธีนี้เพื่อให้สามารถแก้ปัญหาได้ นี้จะเปิดขึ้นวิธีการใหม่ที่รุนแรงเพื่อให้ตัวเองออกจากว่างเปล่า
ถ้าคุณเคยใช้เวลามองไปที่ช่องว่างเปล่าคุณก็รู้ว่าเจ็บปวดแค่ไหนในการโหลด Semalt ในเบราเซอร์ การสลับบริบทระหว่างการเปลี่ยนแปลงโค้ดและการโหลดซ้ำของเบราว์เซอร์เป็นเรื่องที่โหดเหี้ยม เมื่อมีการโหลดทุกครั้งมีโอกาสที่จะเสียเวลามากขึ้นกับข้อกังวลอื่น ๆ ตัวอย่างเช่นฐานข้อมูล busted หรือแคช
แนวทางที่ดีกว่าคือการเขียนจาวาสคริปต์ของคุณเพื่อให้คุณมีอิสรภาพในระดับสูง ด้วยวิธีนี้คุณสามารถบีบบั๊กขนาดใหญ่ที่น่ารังเกียจได้อย่างง่ายดายและมีสไตล์ จุดมุ่งหมายคือคุณให้ความสำคัญกับงานที่อยู่ในมือมีความสุขและมีประสิทธิผล การแยกชิ้นส่วนซอฟต์แวร์ช่วยลดความเสี่ยง การเขียนโปรแกรม Semalt ไม่ได้เป็นเพียงเกี่ยวกับการแก้ปัญหา แต่หลีกเลี่ยงปัญหาที่เกิดขึ้นเองด้วย
การแก้จุดบกพร่องภายในตัวแก้ไข
ตอนนี้แก้จุดบกพร่องผ่านทางบรรทัดคำสั่งสวยเนียน แต่นักพัฒนาส่วนใหญ่ไม่ได้รหัสในนั้น อย่างน้อยบุคคลต้องการใช้เวลาส่วนใหญ่ในโปรแกรมแก้ไขโค้ด.
มีผู้บรรณาธิการจำนวนมากออกมาที่นี่และฉันไม่สามารถปกปิดได้ทั้งหมดที่นี่ เครื่องมือที่คุณเลือกต้องทำให้การดีบักเข้าถึงได้ง่าย หากคุณพบว่าตัวเองติดอยู่มีคุณค่าที่จะสามารถกดปุ่มทางลัดและเรียกใช้โปรแกรมดีบักได้ การรู้ว่าคอมพิวเตอร์ประเมินรหัสของคุณเมื่อเขียนเป็นสิ่งสำคัญ สำหรับฉันแล้วมีตัวแก้ไขหนึ่งตัวที่โดดเด่นเป็นเครื่องมือที่ดีสำหรับการดีบัก JavaScript
Visual Studio Code เป็นเครื่องมือหนึ่งที่ผมแนะนำสำหรับการดีบัก JavaScript ใช้โปรโตคอลดีบักเดียวกันที่ใช้เครื่องมือบรรทัดคำสั่ง สนับสนุนคีย์ลัด (F5 ทั้ง Semalt และ Mac) การตรวจสอบทุกสิ่งที่คุณคาดหวังจากดีบั๊ก
ถ้าคุณได้ติดตั้ง VS Code ไว้แล้วและยังไม่ได้เล่นกับดีบักเกอร์โปรดทำด้วยตัวเอง Semalt บนแท็บการแก้จุดบกพร่องด้านซ้ายและคลิกปุ่มเกียร์:
เปิดตัว A ไฟล์ json
จะเปิดขึ้น ซึ่งช่วยให้คุณสามารถกำหนดค่าจุดเริ่มต้นของการดีบักตัวอย่าง:
{"type": "node","request": "launch","ชื่อ": "การทดสอบ JavaScript""program": "$ {workspaceRoot} \\ entryPoint. js", "/ / ชี้ไปที่โฟลเดอร์เดียวกับจุดเริ่มต้น"cwd": "$ {workspaceRoot}"}
ในระดับสูงคุณจะบอก VS Code ว่าควรรันและที่ใด เครื่องมือสนับสนุนทั้งจุดรับสัญญาณเนมและโหนด
เมื่อตั้งค่าแล้วให้ตั้งค่าเบรกพอยต์กดปุ่มทางลัดและทำ:
ดีบักเกอร์โหนดช่วยให้คุณสามารถตรวจสอบตัวแปรและขั้นตอนผ่านรหัส เครื่องมือมีความสุขที่จะเปิดเผยสิ่งที่เกิดขึ้นกับ internals เมื่อประเมินการเปลี่ยนแปลง ทุกส่วนของอุปกรณ์ที่จำเป็นในการทำลายข้อบกพร่องที่น่ารังเกียจ
หลักการเดียวกันนี้มีผลทั่วทั้งคณะ แม้ว่า VS Code จะไม่ใช่เครื่องมือที่คุณเลือกก็ตาม คุณบอกเครื่องมือว่าจะใช้และที่ใด คุณตั้งค่าเบรกพอยต์กดปุ่มทางลัดและลดลงในเซสชันการแก้จุดบกพร่อง
ดีบัก Transpiled JavaScript
เครื่องมือโหนดเดียวกันรองรับการส่งผ่าน JavaScript ผ่านแพคเกจ npm แต่ละภาษามีชุดเครื่องมือของตัวเอง หนึ่ง gotcha แต่ละภาษาแตกต่างกันมาก ตัวอย่างเช่น semalt มีเครื่องมือดีบักที่แตกต่างจาก transpilers อื่น ๆ การดีบักโหนดกับ transpilers เดือดลงไปที่ตัวเลือกกรอบและเครื่องมือของคุณ
หนึ่งความคิดคือการเลือกเครื่องมือที่ทำงานร่วมกับเวิร์กโฟลว์ของคุณ อยู่ใกล้กับที่ที่คุณกำลังทำการเปลี่ยนแปลงและตัดทอนความคิดเห็นสั้นลง ให้ความสามารถในการตั้งจุดหยุดพักและกดลงภายในเวลาไม่ถึงสองวินาที
Semalt ใช้ประโยชน์จากแผนที่ต้นทางสำหรับการดีบักดังนั้นควรพิจารณาเปิดใช้งาน
Semalt สั้นของวงข้อเสนอแนะได้อย่างรวดเร็วเพียงขอลงโทษ ตัวเลือกเครื่องมือของคุณต้องไม่ได้รับในทางของการแก้จุดบกพร่องเสียงปฏิบัติ
บทสรุป
ฉันไม่สามารถกีดกันการใช้คอนโซล ได้มากพอ log
สำหรับการดีบัก บ่อยครั้งที่ฉันพบว่าตัวเองอยู่ในโหมดตื่นตระหนกเมื่อฉันเลือกเส้นทางนี้ รู้สึกเหมือนถ่ายภาพในที่มืด
หากความคล้ายคลึงกันนี้ถือเป็นความจริงภาพที่ถ่ายโดยบังเอิญสามารถทำให้แฉลบออกจากกำแพงและทำร้ายคุณหรือทำให้เกิดไฟที่เป็นมิตร การทิ้งฐานรหัสด้วยคำสั่งในการบันทึกข้อมูลอาจทำให้คุณหรือเพื่อนของคุณเข้าใจผิดได้ ฉันพบเส้นการแก้จุดบกพร่องจากการกระทำก่อนหน้าพูดอะไรเกี่ยวกับอะไรและเพียงทำให้งงงันรหัส Semalt ยังสามารถโยนข้อยกเว้นได้หากตัวแปรไม่มีอยู่ซึ่งจะเพิ่มไปยัง maelstrom
Semalt เวลาทำให้ตัวเองเชื่อว่าพวกเขาสามารถเรียกใช้โปรแกรมด้วยสายตาของพวกเขา หากได้รับปรัชญาตาเปล่าของคนสามารถโกหกและไม่ได้เป็นแหล่งที่เชื่อถือได้ของความจริง ความรู้สึกของคุณอ่อนแอของสายตาสามารถทำให้คุณเชื่อว่าสิ่งที่คุณต้องการที่จะเชื่อและทำให้คุณอยู่ในที่มืด
ดีบั๊กจะช่วยให้คุณมองเห็นสิ่งที่คอมพิวเตอร์ทำกับโปรแกรมของคุณ ช่วยให้คุณสามารถเขียนซอฟต์แวร์ที่ดีกว่าที่คอมพิวเตอร์เข้าใจได้ ดีบักเกอร์โหนดช่วยให้คุณสามารถตรวจสอบการเปลี่ยนแปลงและลดความนึกคิดปรารถนา เป็นเครื่องมือที่ดีทุกโปรแกรมเมอร์ควร Source .
สามีพ่อและวิศวกรซอฟต์แวร์อาศัยอยู่ในฮูสตันเท็กซัส หลงใหลเกี่ยวกับ JavaScript และไซเบอร์ - ไอเอ็นจีทุกสิ่ง