สำนักวิทยบริการและเทคโนโลยีสารสนเทศ (สวส.)

Office of Academic Resources and Information Technology

Debug กับ Release Mode ใน Visual Studio แตกต่างกันยังไง

หลายคนอาจจะสงสัยนะครับว่า Debug กับ Release โหมดในการ Compile ของ Visual Studio นั่นมันแตกต่างกันยังไง ทำไมถึงต้องมีมัน วันนี้เราจะาตีแตกความรู้ตรงนี้กันนะครับ เริ่มกันเลยนะครับ โดยปกติแล้วการ Compile โปรแกรมเรามีด้วยกัน 2 โหมดนะครับคือ Debug และ Release
 
Debug Mode
การ Compile โค็ดแบบ Debug นั่นก็คือการ Compile โปรแกรมของเราแบบ Full symbolic debug information หรือว่า เราอาจจะกล่าวได้ว่าเป็นการ Compile แบบเอาข้อมูลทุกอย่างที่ใช้เพื่อในการ Debug รวมไปกับ EXE หรือ DLL ของเราเลย ซึ่งการทำแบบนี้จะส่งผลให้ EXE หรือ DLL ของเรานั่นมีขนาดใหญ่มาก เช่น จากเดิมถ้า Compile แบบ Release นั่นขนาดของไฟล์อาจจะแค่ 10KB แต่เมื่อเป็น Debug ขนาดของไฟล์อาจจะเป็น 20KB ก็เป็นได้ครับ เพราะอะไรทำไมขนาดไฟล์ถึงแตกต่างกันได้มากขนาดนั่น ก็เพราะว่าข้อมูลการ Mapping ระหว่าง Source code และ Symbol นั่นมีความซับซ้อนมากครับ ไม่ว่าจะเป็นข้อมูลที่ต้องเก็บว่า ตัวแปรชื่ออะไร คำสั่งไหนอยู่บรรทัดไหน ชื่อฟังก์ชั่นชื่อว่าอะไรบ้าง แล้วลองนึกภาพดูนะครับว่าโปรแกรมที่เขียนด้วย C/C++, C# .... แล้วแปลงเป็น Assembly นั่นซับซ้อนขนาดไหน แล้วเรายังต้องแปลง Assembly ไปเป็น Machine code (0 หรือ 1) อีกนะครับ 
 
แล้วถ้างั้นการ Compile โปรแกรมของเราเป็นแบบ Debug มันมีผลดียังไงละ แน่นอนครับมันต้องมีผลดีแน่นอนเพราะว่ามันจะทำให้เราสามารถที่จะ Debug โปรแกรมได้ไงครับ เพราะว่าเราได้เก็บข้อมูลพวก ชื่อตัวแปร คำสั่งว่าแต่ลรรทัดอยู่ที่ไหน ชื่อฟังก์ชั่น ..... ยังมีข้อมูลอีกมากมายนะครับ ด้วยข้อมูลพวกนี้จึงทำให้เราได้ข้อมูลมากพอที่จะทำการ Debug ได้
 
แล้วใน Visual Studio นั่นเราสามารถตั้งค่าให้ Compile แบบ Debug โหมดได้ยังไงละ เราก็ทำได้ง่ายๆ ครับ บน Toolbar ของ Visual Studio นั่นมี Drop down อยู่ครับเราสามารถสลับกันได้ระหว่าง Debug และ Release
 
ส่วน Output ของโปรแกรมหลังจากการ Compile นะครับจะอยู่ใน bin folder นะครับ ดังเช่นจากภาพด้านล่างนะครับถ้าเราเลือก Release โปรแกรมของเราก็จะอยู่ใน release folder นั่นเองครับ
 
 
ต่อมาเรามาดูขนาดกันดีกว่าครับว่าแต่ละโหมดของการ Compile นั่นมีขนาดไฟล์เท่าไรกันบ้าง จากรูป 2 รูปด้านล่างนั่นได้เปรียบเทียบไฟล์ที่ชื่อว่า MySQLWorkspace นะครับใน Debug นั่นไฟล์จะมีขนาด 419KB ส่วนใน Release นั่นไฟล์มีขนาด 374KB เห็นมั้ยครับว่าขนาดค่อนข้างแตกต่างกันค่อนข้างมาก
 
 Debug Mode
 
Release Mode
Release Mode
 
 
Release Mode
เอาละเรามาดู Release Mode กันกันบ้างดีกว่าครับ หลายคนคงอาจสงสัยว่าแล้วงั้นทำไมต้องมี Release Mode ละในเมื่อ Debug มันเทพออกขนาดนี้ทำได้ทุกอย่าง Debug ก็ได้ แน่นแนครับมันต้องมีข้อดีแน่นอนครับ เพราะว่าในวงการอุตสหกรรม Software จริงๆ แล้วเวลาเค้าจะส่งมอบโปรแกรมเค้าส่งมอบกับแบบ Release Mode นะครับ ทำไมเค้าถึงใช้ Release Mode ก็เพราะว่า Release Mode มีข้อมูลที่ไม่สามารถ Debug ได้นั่นแสดงให้เห็นว่าตัวโปรแกรมก็จะไม่ถูก Revert Engineer มาได้ง่ายๆ นะซิครับ หรือพูดให้เข้าใจง่ายก็คือโปรแกรมนั่นๆ จะไม่สามารถถูก Hack หรือถูก Decode จาก Binary กลับมาเป็น Source code ได้โดยง่ายนั่นเองครับ อีกทั้งข้อดีอีกประการก็คือตัวโปรแกรมที่ส่งให้แก่ลูกค้ามีขนาดเล็กลงมากครับทำให้ Package Installation File นั่นก็เล็กตามไปด้วยครับ

เอาละครับเรามาดูเรื่องสุดท้ายกันดีก่าครับว่าอะไรที่แตกต่างระหว่าง Debug และ Release ในมุมมองของ Performance หรือประสิทธิภาพการทำงานของโปรแกรม แน่นอนครับการทำงาน Release เร็วกว่ามากครับเพราะอะไรทำไมเร็วกว่า ก็เพราะว่าใน Debug นั่นเราจะต้องทำการ Mapping ข้อมูลตัวแปร ข้อมูล Call stack ข้อมูล function ...... อีกมากมายข้อมูลครับ แต่ Release นั่นไม่ได้ทำอะไรเลย จะมีเก็บข้อมูลเหมือนกันครับแต่จะเก็บในจำนวนน้อยมากๆ และเก็บเท่าที่จำเป็นเท่านั่นครับ ด้วยสาเหตุนี้เองที่ทำงให้ โปรแกรมที่ Compile จาก Release Mode ทำงานได้เร็วกว่านั่นเองครับ
 
credit : http://pstudiodev.blogspot.com/2012/08/debug-release-mode-visual-studio.html?spref=fb