Ngoài thông tin tuyệt vời của @BenVoigt, cho phép tôi thực hiện một số bổ sung:
Một điểm dừng được thiết lập bởi trình gỡ lỗi bằng cách thay thế giá trị mã máy (một lệnh hoặc một phần của lệnh) trong quá trình được gỡ lỗi bằng một lệnh bẫy cụ thể tại vị trí trong mã tương ứng với dòng (nguồn) mong muốn để ngắt tại. Hướng dẫn bẫy đặc biệt này có nghĩa là để sử dụng như một điểm dừng - trình gỡ lỗi biết điều này và hệ điều hành cũng vậy.
Khi tiến trình / luồng được gỡ lỗi chạm vào lệnh bẫy, điều đó kích hoạt tiến trình @Ben đang mô tả, bao gồm một nửa hoán đổi ngữ cảnh tạm dừng luồng đang chạy (bao gồm lưu trạng thái CPU vào bộ nhớ) để nối lại tiềm năng sau này. Vì bẫy này là bẫy điểm dừng, hệ điều hành giữ cho quá trình được gỡ lỗi bị treo bằng cách sử dụng có lẽ một cơ chế @Ben mô tả, và thông báo và cuối cùng tiếp tục trình gỡ lỗi.
Trình gỡ lỗi sử dụng các cuộc gọi hệ thống, sau đó, để truy cập trạng thái đã lưu của tiến trình / luồng bị treo đang được gỡ lỗi.
Để thực thi (tiếp tục) dòng mã đã bị hỏng (hiện đã có lệnh bẫy cụ thể), trình gỡ lỗi sẽ khôi phục giá trị mã máy ban đầu mà nó ghi đè bằng lệnh bẫy điểm dừng, có thể đặt bẫy khác ở một nơi khác (ví dụ: nếu bước đơn, hoặc người dùng tạo các điểm dừng mới) và đánh dấu tiến trình / luồng là có thể chạy được, có thể sử dụng cơ chế như @Ben mô tả.
Các chi tiết thực tế có thể phức tạp hơn, trong đó việc giữ một điểm dừng chạy dài bị tấn công có nghĩa là thực hiện một việc gì đó như tráo đổi bẫy điểm dừng để lấy mã thực để dòng đó có thể chạy, và sau đó hoán đổi điểm dừng lại ...
Không phải những đăng ký đang được sử dụng bởi các quá trình hệ điều hành khác liên tục? Làm thế nào để họ không bị ghi đè?
Như @Ben mô tả, sử dụng tính năng tạm dừng / tiếp tục luồng đã có (chuyển đổi ngữ cảnh / hoán đổi đa nhiệm ) cho phép bộ xử lý được chia sẻ bởi nhiều quy trình / luồng bằng cách cắt thời gian.
Có phải nó chỉ là một ảnh chụp nhanh của nội dung và không phải là dữ liệu trực tiếp?
Cả hai. Kể từ khi chủ đề đó nhấn breakpoint bị đình chỉ, nó là một bản chụp của dữ liệu trực tiếp (thanh ghi CPU, vv ..) tại thời điểm đình chỉ, và các bậc thầy có thẩm quyền của các giá trị CPU đăng ký để khôi phục lại vào bộ vi xử lý nên việc được thread tiếp tục . Nếu bạn sử dụng giao diện người dùng của trình gỡ lỗi để đọc và / hoặc thay đổi các thanh ghi CPU (của quá trình được gỡ lỗi), nó sẽ đọc và / hoặc thay đổi ảnh chụp nhanh / chủ này bằng các cuộc gọi hệ thống.