เวิร์กโฟลว์
การตั้งค่าดีบักเกอร์ Windows ระยะไกลระหว่างพีซีแล็บสองเครื่อง 03
การตั้งค่าแล็บ เตรียมเครื่องแล็บสองเครื่อง เซสชันดีบักเกอร์ Windows ระยะไกลจะทำการแนบดีบักเกอร์บนเครื่องหนึ่งไปยังโปรแกรมบนอีกเครื่องหนึ่งผ่านเครือข่าย และเหมาะสำหรับใช้ระหว่างเครื่องแล็บของคุณเองเท่านั้น สัญลักษณ์ต้องมาก่อน ให้ตั้งชื่อเครื่องหนึ่งว่า Host และอีกเครื่องว่า Target สร้างโปรแกรมด้วย debug symbols และเก็บไฟล์ PDB ที่ตรงกันสำหรับการสร้างนั้นๆ เพราะ PDB ที่ไม่ตรงกันจะทำให้ได้ชื่อฟังก์ชันผิด และคอลสเต็กที่ไม่มีสัญลักษณ์จะแสดงเฉพาะที่อยู่เท่านั้น ติดตั้ง StatusRivet บน Host ซึ่งเป็นเครื่องที่คุณใช้งาน และเก็บ Target ไว้สำหรับโปรแกรมที่กำลังทดสอบเท่านั้น จดบันทึกการตั้งค่าใดๆ ที่คุณเปลี่ยนบนเครื่องทั้งสองเครื่องไว้ เพื่อให้คุณสามารถคืนค่าเดิมได้หลังจากนั้น สร้างเหตุการณ์ขัดข้องซ้ำด้วยอินพุตที่เล็กที่สุดที่คุณสามารถหาได้ เพราะกรณีสั้นๆ จะทำให้ได้คอลสเต็กที่สั้นลงและเปรียบเทียบการเปลี่ยนแปลงได้ง่ายขึ้น ตรวจสอบให้แน่ใจว่า Host และ Target สามารถติดต่อถึงกันก่อนที่คุณจะขอให้เอเจนต์ทำอะไร เนื่องจากความล้มเหลวในการเชื่อมต่อจะดูเหมือนดีบักเกอร์ทำงานผิดพลาด
01 เปิดโฟลเดอร์โปรเจกต์ เลือกโฟลเดอร์ที่มีซอร์สโค้ดและไฟล์บิลด์ของคุณเป็นโฟลเดอร์ทำงานของแชท เพราะเครื่องมือไฟล์จะอ่านและแก้ไขเฉพาะภายในโฟลเดอร์นั้นเท่านั้น วางคอลสเต็กที่บันทึกไว้และบันทึกย่อของคุณไว้ที่นี่เช่นกัน เพื่อให้กรณีทั้งหมดอยู่ในที่เดียวและเอเจนต์สามารถอ่านข้อมูลทั้งหมดได้
02 สลับเป็น Ask first Ask first จะหยุดชั่วคราวก่อนการดำเนินการที่เปลี่ยนแปลงสิ่งใดสิ่งหนึ่ง เพื่อให้คุณสามารถอ่านแต่ละขั้นตอนก่อนที่มันจะทำงาน ใช้ Plan only เมื่อคุณต้องการเห็นขั้นตอนก่อนแล้วจึงรันอะไรเลย A plan survives a restart, so you can come back to it later.
03 อธิบายการขัดข้อง ระบุชื่อโปรแกรม เครื่อง Host และเครื่อง Target และอาการที่เกิดขึ้น และระบุว่าเครื่องเหล่านั้นเป็นของคุณ ให้รายละเอียดการเชื่อมต่อจากบันทึกแล็บของคุณเองและอย่าคาดเดาสิ่งใดเลย ระบุว่าการสร้างใดกำลังทำงานอยู่บน Target และ PDB ใดเป็นของโปรแกรมดังกล่าว
04 ตรวจสอบผลลัพธ์ อ่าน diff สร้างใหม่ด้วยคำสั่งบิลด์ของคุณ และรันคำสั่งทดสอบของคุณอีกครั้งบน Target เก็บบันทึกย่อของการเปลี่ยนแปลงไว้กับรายการตรวจสอบ และเก็บดัมพ์เดิมไว้หากการทดสอบใหม่ยังคงล้มเหลว เพื่อให้การลองครั้งถัดไปเริ่มต้นจากหลักฐานไม่ใช่จากความจำ
รายการตรวจสอบเซสชัน StatusRivet · เชื่อมต่อและบันทึก ● Ask first
แนบไปยังโปรแกรมบน Target บันทึกดัมพ์และคอลสเต็ก จากนั้นอ่านคอลสเต็ก
Shell attach your debugger to the targetattached Shell save the dump on the targetsaved Shell write the call stack to stack.txtsaved read_file stack.txtread grep 0xC0000005 stack.txt1 match debug-session.txtคัดลอกตัวอย่าง
# Debug session checklist
1. Build the app with debug symbols and keep the PDB
2. Note the build the crash happened on
3. Start the debugger on the host machine
4. Attach to the app running on the target
5. Reproduce the crash with the smallest input
6. Save a crash dump on the target
7. Save the faulting thread's call stack to stack.txt
8. Read the exception code and the top frames
9. Match the first frame to a source line
10. Propose a minimal fix and rebuild
11. Run the test again and note what changedรายการตรวจสอบแบบข้อความธรรมดาสำหรับเซสชันดีบักหนึ่งครั้งระหว่างเครื่องแล็บสองเครื่อง ครอบคลุมการบิลด์ด้วยสัญลักษณ์ การเชื่อมต่อ การสร้างเหตุการณ์ขัดข้องซ้ำด้วยอินพุตที่เล็กที่สุด การบันทึกดัมพ์และคอลสเต็ก การอ่านเฟรมบนสุด และการรันทดสอบหลังการแก้ไข พร้อมบันทึกย่อของการเปลี่ยนแปลง คัดลอกไปยังโฟลเดอร์โปรเจกต์ของคุณและแก้ไขให้ตรงกับแล็บของคุณ คัดลอกและแก้ไข
วิเคราะห์การขัดข้องด้วยดีบักเกอร์ Windows ระยะไกล เชื่อมต่อจากเครื่อง Host งาน: เชื่อมต่อจากเครื่อง Host ไปยังโปรแกรมของคุณเองที่รันบน Target ของแล็บ เชื่อมต่อก่อน เปิดโฟลเดอร์โปรเจกต์ใน StatusRivet สลับเป็น Ask first และอธิบายการตั้งค่า Shell จะรันโหมดบรรทัดคำสั่งของดีบักเกอร์ของคุณด้วยรายละเอียดการเชื่อมต่อที่คุณให้ และการ์ดจะแสดงว่ามันเชื่อมต่อผ่านรหัสเอาต์พุตจริงหรือไม่ เอเจนต์จะไม่สร้างการตั้งค่าการเชื่อมต่อขึ้นมาเอง ดังนั้นให้รับค่า Host, Target และพอร์ตจากบันทึกแล็บของคุณเอง การดีบักแบบระยะไกลใช้สำหรับเครื่องแล็บของคุณเองเท่านั้น ไม่ใช่สำหรับคอมพิวเตอร์ที่คุณไม่ได้เป็นเจ้าของ อ่านการ์ดก่อนขั้นตอนถัดไป หากการเชื่อมต่อล้มเหลว ขั้นตอนอื่นๆ ไม่ควรทำงาน และคุณต้องแก้ไขการเชื่อมต่อก่อน แล้วจึงถามอีกครั้ง การ์ดจะเก็บคำสั่งที่แน่นอนไว้ เพื่อให้คุณสามารถทำซ้ำได้ภายหลัง
บันทึกดัมพ์และคอลสเต็ก งาน: หลังจากที่คุณสร้างเหตุการณ์ขัดข้องซ้ำบน Target ด้วยอินพุตที่เล็กที่สุด ให้บันทึกหลักฐาน บันทึกไฟล์ทั้งสองไฟล์ Shell จะขอให้ดีบักเกอร์ของคุณเขียนดัมพ์การขัดข้องและบันทึกคอลสเต็กของเธรดที่เกิดข้อผิดพลาดลงในไฟล์ข้อความ และการ์ดจะแสดงผลลัพธ์ทั้งสองอย่าง การเข้าสู่ระบบ jit debugger ของ Windows บน Target จะเริ่มดีบักเกอร์โดยอัตโนมัติเมื่อแอปพลิเคชันขัดข้อง นั่นเป็นการตั้งค่าระบบ ดังนั้นเปลี่ยนเฉพาะบนเครื่องทดสอบ จดบันทึกค่าเดิมไว้และคืนค่าหลังจากนั้น เพื่อหาสาเหตุของการขัดข้องของระบบจาก minidump ให้เริ่มต้นจากคอลสเต็กที่บันทึกไว้ คุณอนุมัติแต่ละขั้นตอนในโหมด Ask first และเก็บไฟล์ทั้งสองไฟล์พร้อมกับรายการตรวจสอบสำหรับบุคคลถัดไปที่จะอ่านกรณีนี้ ตั้งชื่อไฟล์ตามการสร้างเพื่อให้ไม่มีใครสับสนกัน
จับคู่เฟรมกับบรรทัดซอร์ส งาน: เชื่อมต่อเฟรมบนสุดกับโค้ดของคุณ เริ่มต้นด้วยสัญลักษณ์ read_file เปิด stack.txt grep ค้นหาโปรเจกต์สำหรับชื่อฟังก์ชันและรหัสข้อยกเว้น เช่น 0xC0000005 สำหรับการละเมิดสิทธิ์ในการเข้าถึง และ read_file เปิดไฟล์ซอร์สที่บรรทัดนั้น ด้วย PDB ที่ตรงกัน คอลสเต็กจะแสดงชื่อฟังก์ชัน ไฟล์ซอร์สและหมายเลขบรรทัด ในขณะที่หากไม่มี คุณจะเห็นเฉพาะที่อยู่เท่านั้น เครื่องที่ค้างซึ่งจบลงด้วย bsod ด้วยข้อผิดพลาดการตรวจสอบความปลอดภัยของเคอร์เนลเป็นกรณีสำหรับขั้นตอนนี้อย่างแม่นยำ: ดัมพ์, คอลสเต็ก, ซอร์ส อ่านหลักฐานของคุณเองก่อนที่เอเจนต์จะแก้ไขสิ่งใด เพราะเอเจนต์ทำงานจากข้อความและไม่สามารถดีบักโปรแกรมให้คุณได้ สำหรับการดีบักแบบทีละขั้นตอน ให้ใช้ดีบักเกอร์ของคุณเองและบอกเอเจนต์ว่าคุณเห็นอะไร
เสนอการแก้ไขและรันทดสอบอีกครั้ง งาน: เปลี่ยนการค้นพบเป็นการเปลี่ยนแปลง edit_file จะเสนอ diff ที่เล็กที่สุด เช่น การตรวจสอบค่า null ที่ขาดหายไประบบหรือดัชนีที่ผิดพลาด และในโหมด Ask first เอเจนต์จะหยุดชั่วคราวเพื่อให้คุณอ่านบรรทัดที่เปลี่ยนแปลง Shell จะรันคำสั่งบิลด์ของคุณ (พร้อมสัญลักษณ์) และคำสั่งทดสอบของคุณ และการ์ดจะรายงานรหัสเอาต์พุตจริง heap corruption bsod ในโหมดเคอร์เนลในไดรเวอร์ที่คุณเขียนอาจปรากฏขึ้นนานหลังจากการเขียนข้อมูลที่ไม่ถูกต้อง ดังนั้นตรวจสอบบัฟเฟอร์ที่เขียนก่อนหน้านี้ในคอลสเต็ก ไม่ใช่เพียงเฟรมสุดท้าย store exception bsod ที่ไม่คาดคิดบน Target ของแล็บของคุณจัดการด้วยวิธีเดียวกัน ยอมรับ diff เฉพาะหลังจากการทดสอบผ่าน และเขียนบันทึกย่อของการเปลี่ยนแปลง ทดสอบก่อนยอมรับ หากการทดสอบยังคงล้มเหลว ให้เก็บคอลสเต็กใหม่และเริ่มลูปอีกครั้งจากขั้นตอนที่สอง