Print Debugging ทำแบบนี้ดีไหมนะ?
Published on
Authored by Pete. Pittawat Taveekitworachai.
การพัฒนาโปรแกรมกับบัคนั้นอาจเรียกได้ว่าเป็นของคู่กัน ไม่ว่าเราจะตั้งใจหรือไม่ก็ตาม บัคก็มีอยู่หลายแบบ หลายประเภท หากเป็นบัคที่เราพิมพ์ผิด Syntax หรือบัคตระกูล Compile-time Error แบบนี้เราอาจจะแก้ไขได้ง่าย เพราะว่า Compiler จะบอกเราถึงจุดที่เราผิด รวมทถึงในบางครั้งก็แนะนำวิธีแก้ให้กับเราเรียบร้อย
แต่หลายครั้งที่บัคที่เราเจอนั้นมาในรูปแบบของพฤติกรรมของโปรแกรมไม่เป็นไปตามที่เราตั้งใจไว้ ซึ่งหลาย ๆ ครั้งเรามักเรียกว่า Logic Error หรือข้อผิดพลาดที่เกิดจากการที่เราสั่งงานผ่านโค้ดได้ไม่ถูกต้อง (แม้ว่าเราจะคิดว่าถูก) ทำให้โปรแกรมมีพฤติกรรมไม่เป็นไปตามที่เราตั้งใจไว้
แน่นอนว่าการแก้ไขบัคที่เป็น Logic Error นั้นยากกว่าการแก้ไขบัคแบบ Syntax Error หรือ Type Error มาก เพราะนอกจาก Compiler จะไม่บอกเราแล้วมามีอะไรผิด หลายครั้งเรามักจะไม่รู้ด้วยว่าจะเริ่มต้นที่ตรงไหนดีที่ทำให้ข้อผิดพลาดนี้เกิดขึ้นมา
วิธีหนึ่งที่เรามักใช้กันในการวิเคราะห์ข้อผิดพลาดคือการสังเกต (Observe) ค่าของตัวแปรต่าง ๆ ที่เปลี่ยนแปลงไปในแต่ละช่วงขณะของโปรแกรมว่าเป็นไปตามที่ตั้งใจไว้หรือไม่ ซึ่งเรามักจะทำด้วยการ Print ชื่อตัวแปร + ค่าออกมาในหลาย ๆ จุดของโปรแกรม
ข้อดีที่เห็นได้ชัดของวิธีนี้คือง่ายและค่อนข้างเป็นไปตามสัญชาตญาณของเรา อย่างไรก็ตามวิธีนี้มักจะมาพร้อมกับ
- การที่จะต้องจำและมาตามเก็บ Print ต่าง ๆ ที่เราแปะไว้ทั่วทั้งโปรแกรม
- หรือถ้าเราไม่ลบเราอาจจะ Comment ไว้เผื่อใช้ในอนาคตซึ่งทำให้โค้ดเรารกโดยไม่จำเป็น
- สับสนมากขึ้น หากเรามีโค้ดส่วนที่ใช้งานสำหรับ Log อยู่แล้ว
- หากเป็นบางระบบที่ผู้ใช้สามารถเข้าถึง Output จากการ Print ได้ง่าย เช่น Website แล้วเราเผลอ Print Sensitive Data ก็อาจจะเป็นปัญหาได้ หากเราเผลอไม่ได้ลบ Print ที่ใช้เสร็จแล้วทิ้งไป
- หากเป็นระบบที่มีนักพัฒนาหลายคนทำงานร่วมกัน (ส่วนใหญ่ในปัจจุบัน) แล้วโค้ดส่วนที่เราใช้สำหรับ Print หลุดขึ้นไปบน Version Control ก็อาจทำให้นักพัฒนาคนอื่นสับสนได้ว่าโค้ดส่วนนั้นเป็นส่วนที่จำเป็นต่อโปรแกรมจริง ๆ หรือไม่
ดังนั้นหากเราต้องการใช้วิธีนี้ ก็อาจเหมาะสำหรับการ Track ตัวแปรไม่กี่ตัวในไม่กี่ตำแหน่งเท่านั้น แต่จริง ๆ แล้วเรามีวิธีที่ดีกว่านั้น นั่นคือการใช้งาน Breakpoint คู่กับ Debugger ซึ่ง IDE/Code Editor เจ้าดัง ๆ หลายตัวต่างติดมาให้เรียบร้อยแล้วรอให้เราใช้งาน โดยในหลายครั้ง Debugger เหล่านี้ยังมาพร้อมความสามารถเพิ่มเติมที่จะช่วยให้การแก้ไขโปรแกรมของเราลดเวลา และความ Pain ลงได้อีกด้วย
รู้อย่างนี้แล้วก็อยากเชิญชวนให้ทุก ๆ คนมาหัดใช้ Debugger, Breakpoint เพื่อช่วยเราในการ Debug โปรแกรมกันแทนการใช้ Print statement เพื่อชีวิตที่ดีขึ้นของเรานั่นเอง