นอกจากข้อมูลที่ยอดเยี่ยมโดย @BenVoigt อนุญาตให้ฉันทำการเพิ่มเติม:
จุดพักถูกตั้งค่าโดยดีบักเกอร์โดยแทนที่ค่ารหัสเครื่อง (คำสั่งหรือส่วนหนึ่งของคำสั่ง) ในกระบวนการที่กำลังดีบั๊กด้วยคำสั่งแทร็บเฉพาะที่ตำแหน่งในรหัสที่สอดคล้องกับบรรทัด (ซอร์ส) ที่ต้องการเพื่อแยก คำสั่ง trap นี้มีไว้สำหรับใช้เป็นจุดพัก - ดีบักรู้เรื่องนี้และระบบปฏิบัติการก็เช่นกัน
เมื่อกระบวนการ / เธรดที่กำลังดีบั๊กกระทบกับคำสั่งแทร็บซึ่งเป็นสาเหตุให้กระบวนการ @Ben กำลังอธิบายซึ่งรวมถึงครึ่งหนึ่งของการแลกเปลี่ยนบริบทที่ระงับเธรดที่กำลังทำงานอยู่ในปัจจุบัน (ซึ่งรวมถึงการบันทึกสถานะ CPU ไปยังหน่วยความจำ) เนื่องจากกับดักนี้เป็นกับดักเบรกพอยต์ระบบปฏิบัติการจะเก็บกระบวนการที่ถูกดีบั๊กไว้ชั่วคราวโดยใช้กลไก @Ben อธิบายและแจ้งให้ทราบและในที่สุดก็จะกลับมาทำงานในการดีบัก
ดีบักเกอร์ใช้การเรียกของระบบจากนั้นเพื่อเข้าถึงสถานะที่บันทึกไว้ของกระบวนการ / เธรดที่ถูกหยุดชั่วคราวที่กำลังดีบั๊ก
ในการดำเนินการ (ทำต่อ) บรรทัดของรหัสที่แตก (ซึ่งตอนนี้มีคำสั่งแทร็บเฉพาะ) ดีบักเกอร์จะเรียกคืนค่ารหัสเครื่องดั้งเดิมที่เขียนทับด้วยคำสั่งแทร็บเบรกพอยต์อาจตั้งกับดักอื่นได้ หรือผู้ใช้สร้างเบรกพอยต์ใหม่) และทำเครื่องหมายกระบวนการ / เธรดว่าสามารถรันได้บางทีอาจใช้กลไกตามที่ @Ben อธิบาย
รายละเอียดที่แท้จริงอาจมีความซับซ้อนมากขึ้นในการทำให้เบรกพอยต์ที่รันเป็นเวลานานหมายถึงการทำอะไรบางอย่างเช่นการสลับกับดักเบรกพอยต์สำหรับรหัสจริงเพื่อให้บรรทัดนั้นสามารถทำงานได้
การลงทะเบียนเหล่านั้นถูกใช้โดยกระบวนการ OS อื่น ๆ อย่างต่อเนื่องใช่หรือไม่ พวกเขาจะไม่ถูกเขียนทับได้อย่างไร?
ดังที่ @Ben อธิบายไว้การใช้คุณสมบัติการหยุดชั่วคราว / เรียกคืนเธรดที่มีอยู่แล้ว (การสลับบริบท / การสลับการทำงานหลายภารกิจ ) ที่อนุญาตให้ตัวประมวลผลร่วมกันโดยใช้หลายกระบวนการ / เธรดโดยใช้การแบ่งเวลา
เป็นเพียงภาพรวมของเนื้อหาและไม่ใช่ข้อมูลจริง
มันเป็นทั้ง ตั้งแต่ด้ายที่ตีเบรกพอยต์ถูกระงับมันเป็นภาพรวมของข้อมูลสด (ลงทะเบียน CPU ฯลฯ .. ) ในช่วงเวลาของการระงับและต้นแบบเผด็จการของค่า CPU ลงทะเบียนเพื่อคืนค่าลงในหน่วยประมวลผลที่ควรจะเป็นด้ายกลับมา . หากคุณใช้ส่วนต่อประสานผู้ใช้ของดีบั๊กเกอร์ในการอ่านและ / หรือเปลี่ยนการลงทะเบียน CPU (ของกระบวนการที่กำลังดีบั๊ก) มันจะอ่านและ / หรือเปลี่ยนสแนปชอต / ต้นแบบนี้โดยใช้การเรียกระบบ