ใครก็ตามที่เคยพัฒนาเว็บแอปพลิเคชันโดยใช้ ASP มาก่อนจะต้องรู้ว่าการดีบักเว็บแอปพลิเคชันนั้นยุ่งยากเพียงใด ใน ASP การดีบักเป็นเรื่องที่เจ็บปวดและมักจะเกี่ยวข้องกับการพิมพ์ค่าของตัวแปรโดยใช้เมธอด Response.Write() ดังนั้นถามตัวเองว่า: กี่ครั้งแล้วที่คุณลืมลบคำสั่งการดีบักก่อนที่จะปรับใช้แอปพลิเคชันของคุณ
สถานการณ์นี้เปลี่ยนแปลงไปอย่างสิ้นเชิงเมื่อมีส่วนประกอบของ .NET Framework เข้ามา ใน .NET คุณสามารถติดตามการดำเนินการของเว็บแอปพลิเคชันทั้งหมดได้โดยใช้ดีบักเกอร์ใน Visual Studio .NET หรือโดยใช้คลาส Trace ในเนมสเปซ System.Web.TraceContext บทความนี้สาธิตวิธีการใช้คลาสการติดตามเพื่อช่วยงานการตรวจแก้จุดบกพร่องของคุณ
การใช้คลาสการติดตาม
ASP.NET มีคลาส Trace ที่ช่วยติดตามการไหลของข้อมูลแอปพลิเคชัน แทนที่จะใช้วัตถุการตอบสนองสำหรับการดีบัก ตอนนี้คุณสามารถใช้คลาสการติดตามเพื่อพิมพ์ข้อมูลการดีบักได้
เพื่อสาธิตการใช้งาน ขั้นแรกเราสร้างแอปพลิเคชันเว็บ ASP.NET และวางปุ่มและตัวควบคุมกล่องรายการบน WebForm1 เริ่มต้น (ดังแสดงในรูปที่ 1) เติมตัวควบคุมกล่องรายการด้วยสามรายการและตั้งค่าคุณสมบัติ AutoPostBack เป็น True
รูปที่ 1. การเติมข้อมูล WebForm1 เริ่มต้น |
สำหรับบทความนี้ ฉันต้องการติดตามขั้นตอนการดำเนินการของแอปพลิเคชันของฉัน ขั้นแรก เปิดใช้งานการติดตาม คำสั่งเพจจำเป็นต้องมีแอตทริบิวต์ Trace และตั้งค่าเป็น True (สลับไปที่โหมดดูซอร์สโค้ด HTML) ดังแสดงในรูปที่ 2
รูปที่ 2 การติดตามการเปิดใช้งาน |
ต่อไป ฉันจะแทรกคำสั่ง Trace ในเหตุการณ์การโหลดของแบบฟอร์ม เพื่อให้ฉันรู้ว่าเกิด Postback หรือไม่ เหตุการณ์ PostBack เป็นหนึ่งในคุณลักษณะที่น่าสับสนที่สุดใน ASP.NET และมักจะนำไปสู่ความล้มเหลวสำหรับนักพัฒนาที่เพิ่งเริ่มใช้ ASP.NET
Page_Load ย่อยส่วนตัว (ผู้ส่ง ByVal As System.Object, _ ByVal e เป็น System.EventArgs) _ จัดการ MyBase.Load 'วางรหัสผู้ใช้เพื่อเริ่มต้นเพจที่นี่ Trace.Write("โหลดเพจแล้ว") ถ้าไม่เป็นPostBack แล้ว Trace.Write("ไม่อยู่ใน postback") 'ดำเนินการบางอย่างเมื่อเกิด postback อื่น' Trace.Write("ใน postback") 'ดำเนินการบางอย่างสิ้นสุดถ้า' จบหมวดย่อย |
ฉันต้องการทราบด้วยว่า postback เกิดขึ้นเมื่อเลือกรายการกล่องรายการหรือไม่:
รายการย่อยส่วนตัวBox1_SelectedIndexChanged (ผู้ส่ง ByVal เป็น _ ระบบ.วัตถุ _ ByVal e As System.EventArgs) จัดการ _ ListBox1.SelectedIndexChanged Trace.Write("รายการ postback") จบหมวดย่อย |
เมื่อแอปพลิเคชัน ASP.NET ข้างต้นทำงาน ผลลัพธ์ต่อไปนี้จะปรากฏขึ้น (แสดงในรูปที่ 3):
รูปที่ 3 การแสดงข้อมูลการติดตาม |
คุณจะสังเกตได้ว่าเมื่อโหลด WebForm1 เป็นครั้งแรก คุณจะเห็นสตริง "โหลดหน้าแล้ว" และ "ไม่อยู่ใน postback" หากคุณคลิกปุ่มบน WebForm1 คุณจะเห็นบันทึกแสดงในรูปที่ 4 ในทำนองเดียวกัน ถ้าคลิกกล่องรายการ สตริง "Listbox postback" ก็จะปรากฏขึ้นเช่นกัน
รูปที่ 4. ตรวจสอบข้อมูลการติดตาม |
หน้าการติดตามประกอบด้วยส่วนต่อไปนี้ (ข้อมูลบางส่วนไม่แสดงในรูปที่ 3):
ส่วน | คำอธิบาย |
รายละเอียดคำขอ | อธิบายข้อมูลที่เกี่ยวข้องกับคำขอ เช่น ID การสนทนา การเข้ารหัส และเวลาของคำขอ |
ข้อมูลการติดตาม | ประกอบด้วยรายละเอียดของแอปพลิเคชันที่กำลังทำงานอยู่ ข้อมูลการติดตามจะแสดงในส่วนนี้ |
แผนผังการควบคุม | จะแสดงข้อมูลเกี่ยวกับการควบคุมในหน้าและขนาดของฟิลด์ที่ซ่อน Viewstate |
คอลเลกชันคุกกี้ | จะแสดงคุกกี้ที่ตั้งค่าโดยเพจและค่าต่างๆ |
คอลเลกชันส่วนหัว | จะแสดงข้อมูลส่วนหัว HTTP เช่น ความยาวเนื้อหา และ user-agent |
คอลเลกชันฟอร์ม | จะแสดงชื่อของตัวควบคุมบนหน้าและค่าของมัน |
ตัวแปรเซิร์ฟเวอร์ | แสดงตัวแปรสภาพแวดล้อมฝั่งเซิร์ฟเวอร์ |
โปรดทราบว่าข้อมูลการติดตามของเราปรากฏใต้ "ส่วนข้อมูลการติดตาม" หากคุณต้องการปิดการติดตาม เพียงตั้งค่าแอตทริบิวต์ Trace ในคำสั่งเพจเป็น False ไม่จำเป็นต้องลบคำแนะนำในการติดตามออกจากแอปพลิเคชันของคุณ การปิดการดีบักตอนนี้ทำได้ง่ายเพียงแค่ตั้งค่าบูลีน
การเปิด/ปิดการติดตามเป็นเพียงเรื่องของการปรับเปลี่ยนค่าของแอตทริบิวต์ Trace ในคำสั่งเพจ คุณยังสามารถปิดการติดตามโดยทางโปรแกรมได้โดยใช้คลาส Trace สมาชิกของคลาส Trace มีดังนี้:
คำอธิบาย | คุณสมบัติ |
IsEnabled | ระบุว่าจะเปิดใช้งานการติดตามคำขอปัจจุบันหรือไม่ |
TraceMode | ตั้งค่าโหมดการติดตาม: sortByCategory หรือ sortByTime |
วิธี | การ คำอธิบาย |
เตือน | จะแสดงข้อมูลการติดตามเป็นสีแดง |
เขียน | ข้อมูลการติดตาม |
หากต้องการปิดการติดตามโดยทางโปรแกรม ให้ใช้คำสั่งต่อไปนี้ในเหตุการณ์โหลดของ WebForm1:
ในกรณีของเรา ข้อมูลการติดตามจะไม่แสดงอย่างเด่นชัด ดังนั้นจึงถูกซ่อนไว้โดยข้อมูลการติดตามอื่นๆ เมธอด Warn() ของคลาส Trace สามารถพิมพ์ข้อมูลการติดตามเป็นสีแดง ดังนั้นแทนที่จะเขียนโค้ดแบบนี้:
Trace.Write("โหลดเพจแล้ว") |
แทน:
Trace.Warn("โหลดเพจแล้ว") |
รูปที่ 5 แสดงข้อมูลการดีบักที่แสดงเป็นสีแดงสำหรับเมธอด Warn()
รูปที่ 5. การใช้เมธอด Warn() เพื่อแสดงข้อมูลการติดตามเป็นสีแดง |
จัดเรียงข้อมูลการติดตาม
การใส่คำสั่งการติดตามหลายรายการในแอปพลิเคชันอาจทำให้เกิดความยุ่งเหยิงในบางครั้ง การติดตามจะง่ายขึ้นหากข้อมูลการติดตามของคุณสามารถแบ่งออกเป็นหมวดหมู่ต่างๆ ได้ คลาส Trace ช่วยให้เราสามารถจำแนกและเรียงลำดับข้อมูลการติดตามตามหมวดหมู่
ตัวอย่างต่อไปนี้สาธิตวิธีจัดกลุ่มข้อมูลการติดตามตามหมวดหมู่:
Page_Load ย่อยส่วนตัว (ผู้ส่ง ByVal As System.Object, _ ByVal e เป็น System.EventArgs) _ จัดการ MyBase.Load Trace.TraceMode = TraceMode.SortByCategory 'วางรหัสผู้ใช้สำหรับการเริ่มต้นเพจที่นี่ Trace.Warn("Page_Load", "Page Loaded") ถ้าไม่เป็นPostBack แล้ว 'ดำเนินการบางอย่าง Trace.Warn("Page_Load", "Not in a postback") อื่น Trace.Warn("Page_Load", "ใน postback") สิ้นสุดถ้า จบหมวดย่อย
รายการย่อยส่วนตัวBox1_SelectedIndexChanged (ผู้ส่ง ByVal _ ในฐานะ System.Object, ByVal e As _ System.EventArgs) จัดการ _ ListBox1.SelectedIndexChanged Trace.Warn("ListBox", "Listbox postback") จบหมวดย่อย |
เมื่อดำเนินการตัวอย่างนี้ ข้อมูลการดีบักต่อไปนี้จะแสดงขึ้น โดยจัดกลุ่มตามหมวดหมู่ (แสดงในรูปที่ 6):
รูปที่ 6 จัดเรียงตามหมวดหมู่ |
มาวิเคราะห์โค้ดด้านบนกัน:
Trace.TraceMode = TraceMode.SortByCategory |
คุณสมบัติ TraceMode ตั้งค่าโหมดที่รองรับโดยการติดตาม:
· SortByCategory: จัดเรียงข้อมูลการติดตามตามประเภท
· SortByTime: แสดงข้อมูลการติดตามตามลำดับการดำเนินการ
เนื่องจากเราเลือกการเรียงลำดับตามโหมดหมวดหมู่ รูปที่ 7 แสดงข้อมูลที่เรียงลำดับตามหมวดหมู่
Trace.Warn("Page_Load", "โหลดหน้าแล้ว") |
คุณลักษณะ Warn จะแสดงข้อความเป็นสีแดง โปรดทราบว่านี่เป็นวิธีการโอเวอร์โหลด ในตัวอย่าง เราส่งผ่านพารามิเตอร์สองตัว หมวดหมู่อินพุตแรก (หมวดหมู่) พารามิเตอร์ที่สองคือการรับข้อความ (ข้อความ)
นอกจากการตั้งค่าโหมดการติดตามโดยใช้คลาส Trace แล้ว คุณยังสามารถระบุโหมดการติดตามโดยใช้คำสั่งเพจได้:
<%@ ภาษาเพจ = "vb" Trace = "true" TraceMode = "SortByCategory" AutoEventWireup = "false" Codebehind = "WebForm1.aspx.vb" สืบทอด = "WebApplication1.WebForm1" %> |
การติดตามแอปพลิเคชัน
ส่วนสุดท้ายจะกล่าวถึงการติดตามเพจ ซึ่งจะติดตามการไหลของข้อมูลการดำเนินการภายในเพจ ASP.NET ยังสนับสนุนการติดตามระดับแอปพลิเคชันด้วยการตั้งค่าการติดตามระดับแอปพลิเคชันในไฟล์ web.config ภายใต้ส่วนการติดตาม:
หากต้องการเปิดใช้งานการติดตามระดับแอปพลิเคชัน ให้ตั้งค่าต่อไปนี้:
คุณสมบัติ | ค่า | คำอธิบาย |
เปิดใช้งาน | True | เปิดใช้งานหรือปิดใช้งานการติดตามระดับแอปพลิเคชัน |
requestLimit | 10 | กำหนดจำนวนคำขอสูงสุดที่จะติดตาม |
pageOutput | False | แสดงข้อมูลการติดตามที่ท้ายหน้า |
TraceMode | sortByTime | วิธีการเรียงลำดับข้อมูลการติดตาม |
localOnly | True | ตั้งค่าความสามารถในการดูการติดตามเบราว์เซอร์บนคอมพิวเตอร์ที่ไม่ใช่ในเครื่อง |
เมื่อโหลดแอปพลิเคชันแล้ว ข้อมูลการติดตามจะไม่แสดงบนหน้า เพื่อที่จะดูข้อมูลการติดตาม เราจำเป็นต้องใช้โปรแกรมดูการติดตาม (trace.axd):
รูปที่ 7 การติดตามระดับแอปพลิเคชัน |
รูปที่ 7 แสดงข้อมูลการติดตามสำหรับคำขอหกครั้งล่าสุดของแอปพลิเคชัน หากต้องการดูรายละเอียดเกี่ยวกับคำขอแต่ละรายการ ให้คลิกลิงก์ "ดูรายละเอียด" สำหรับแต่ละแถว
โปรดทราบว่าหากตั้งค่าการติดตามเป็นจริงในไฟล์ web.config และตั้งค่าเป็นเท็จในคำสั่งเพจ การติดตามจะถูกปิดใช้งาน
สรุป
ASP.NET ทำให้การดีบักแอปพลิเคชันเว็บง่ายขึ้นมาก ตอนนี้คุณรู้วิธีใช้การติดตามแล้ว ลองดูสิว่าจะปรับปรุงประสิทธิภาพการทำงานของคุณได้มากแค่ไหน!