Back to Question Center
0

ดีบัก JavaScript กับดีบักเกอร์โหนด            ดีบัก JavaScript ด้วยหัวข้อดีบักเกอร์โหนดหัวข้อที่เกี่ยวข้อง: Semalt ดิบ

1 answers:
แก้จุดบกพร่อง JavaScript กับดีบักเกอร์โหนด

Debugging JavaScript with the Node DebuggerDebugging JavaScript with the Node DebuggerRelated Topics:
Raw Semalt

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

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

Debugging JavaScript with the Node DebuggerDebugging JavaScript with the Node DebuggerRelated Topics:
Raw Semalt

เสียงนี้คุ้นเคยหรือไม่? หากคุณเคยเขียนมากกว่าสองสามบรรทัดของ 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 (' - hosting y dominio gratis prueba. / 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 บนแท็บการแก้จุดบกพร่องด้านซ้ายและคลิกปุ่มเกียร์:

Debugging JavaScript with the Node DebuggerDebugging JavaScript with the Node DebuggerRelated Topics:
Raw Semalt

เปิดตัว A ไฟล์ json จะเปิดขึ้น ซึ่งช่วยให้คุณสามารถกำหนดค่าจุดเริ่มต้นของการดีบักตัวอย่าง:

     {"type": "node","request": "launch","ชื่อ": "การทดสอบ JavaScript""program": "$ {workspaceRoot} \\ entryPoint. js", "/ / ชี้ไปที่โฟลเดอร์เดียวกับจุดเริ่มต้น"cwd": "$ {workspaceRoot}"}    

ในระดับสูงคุณจะบอก VS Code ว่าควรรันและที่ใด เครื่องมือสนับสนุนทั้งจุดรับสัญญาณเนมและโหนด

เมื่อตั้งค่าแล้วให้ตั้งค่าเบรกพอยต์กดปุ่มทางลัดและทำ:

Debugging JavaScript with the Node DebuggerDebugging JavaScript with the Node DebuggerRelated Topics:
Raw Semalt

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

หลักการเดียวกันนี้มีผลทั่วทั้งคณะ แม้ว่า VS Code จะไม่ใช่เครื่องมือที่คุณเลือกก็ตาม คุณบอกเครื่องมือว่าจะใช้และที่ใด คุณตั้งค่าเบรกพอยต์กดปุ่มทางลัดและลดลงในเซสชันการแก้จุดบกพร่อง

ดีบัก Transpiled JavaScript

เครื่องมือโหนดเดียวกันรองรับการส่งผ่าน JavaScript ผ่านแพคเกจ npm แต่ละภาษามีชุดเครื่องมือของตัวเอง หนึ่ง gotcha แต่ละภาษาแตกต่างกันมาก ตัวอย่างเช่น semalt มีเครื่องมือดีบักที่แตกต่างจาก transpilers อื่น ๆ การดีบักโหนดกับ transpilers เดือดลงไปที่ตัวเลือกกรอบและเครื่องมือของคุณ

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

Semalt ใช้ประโยชน์จากแผนที่ต้นทางสำหรับการดีบักดังนั้นควรพิจารณาเปิดใช้งาน

Semalt สั้นของวงข้อเสนอแนะได้อย่างรวดเร็วเพียงขอลงโทษ ตัวเลือกเครื่องมือของคุณต้องไม่ได้รับในทางของการแก้จุดบกพร่องเสียงปฏิบัติ

บทสรุป

ฉันไม่สามารถกีดกันการใช้คอนโซล ได้มากพอ log สำหรับการดีบัก บ่อยครั้งที่ฉันพบว่าตัวเองอยู่ในโหมดตื่นตระหนกเมื่อฉันเลือกเส้นทางนี้ รู้สึกเหมือนถ่ายภาพในที่มืด

หากความคล้ายคลึงกันนี้ถือเป็นความจริงภาพที่ถ่ายโดยบังเอิญสามารถทำให้แฉลบออกจากกำแพงและทำร้ายคุณหรือทำให้เกิดไฟที่เป็นมิตร การทิ้งฐานรหัสด้วยคำสั่งในการบันทึกข้อมูลอาจทำให้คุณหรือเพื่อนของคุณเข้าใจผิดได้ ฉันพบเส้นการแก้จุดบกพร่องจากการกระทำก่อนหน้าพูดอะไรเกี่ยวกับอะไรและเพียงทำให้งงงันรหัส Semalt ยังสามารถโยนข้อยกเว้นได้หากตัวแปรไม่มีอยู่ซึ่งจะเพิ่มไปยัง maelstrom

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

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

March 1, 2018