@BenVoigt द्वारा महान जानकारी के अलावा, मुझे कुछ अतिरिक्त बनाने की अनुमति दें:
एक ब्रेकपॉइंट को डीबगर द्वारा मशीन कोड मान (एक निर्देश या एक निर्देश का हिस्सा) की प्रक्रिया में सेट किया जाता है, जो कोड में उस स्थान पर एक विशेष जाल निर्देश के साथ डिबग किया जा रहा है जो वांछित (स्रोत) लाइन से मेल खाता है। यह विशेष रूप से ट्रैप निर्देश एक ब्रेकपॉइंट के रूप में उपयोग के लिए है - डिबगर यह जानता है और इसलिए ऑपरेटिंग सिस्टम करता है।
जब प्रक्रिया / थ्रेड डीबग किया जा रहा है, तो ट्रैप निर्देश हिट करता है, जो @Ben प्रक्रिया को ट्रिगर करता है, जिसमें वर्णन किया जा रहा है, जिसमें एक संदर्भ स्वैप का आधा हिस्सा शामिल है जो कि वर्तमान में चल रहे थ्रेड को निलंबित कर देता है (जिसमें इसकी CPU स्थिति को मेमोरी में सहेजना शामिल है) संभावित बाद में विघटन के लिए। चूंकि यह जाल एक ब्रेकपॉइंट जाल है, इसलिए ऑपरेटिंग सिस्टम डिबग किए जा रहे प्रक्रिया को संभवत: @Ben वर्णित करता है, और सूचित करता है और अंततः डिबगर को फिर से शुरू करता है।
डिबगर सिस्टम कॉल का उपयोग करता है, फिर, निलंबित प्रक्रिया / थ्रेड के डीबग किए जाने की सहेजी स्थिति तक पहुँचने के लिए।
निष्पादित करने के लिए (फिर से शुरू) कोड की लाइन जो टूट गई (जिसमें अब विशेष जाल निर्देश है), डीबगर मूल मशीन कोड मूल्य को पुनर्स्थापित करेगा, जो ब्रेकपॉइंट ट्रैप निर्देश के साथ आगे निकल गया, संभवतः एक और जाल कहीं और सेट करें (जैसे कि एकल कदम,) या उपयोगकर्ता नया ब्रेकपॉइंट बनाता है), और रन करने योग्य के रूप में प्रक्रिया / थ्रेड को चिह्नित करता है, शायद @Ben के रूप में एक तंत्र का उपयोग करता है।
वास्तविक विवरण अधिक जटिल हो सकता है, जिसमें लंबे समय तक चलने वाले ब्रेकपॉइंट को हिट रखने का मतलब है कि वास्तविक कोड के लिए ब्रेकपॉइंट जाल को स्वैप करने जैसा कुछ करना ताकि लाइन चल सके, और फिर ब्रेकपॉइंट को फिर से स्वैप कर सके ...
क्या अन्य ओएस प्रक्रियाओं द्वारा लगातार उपयोग किए जा रहे रजिस्टर नहीं हैं? वे ओवरराइट कैसे नहीं करते?
जैसा कि @Ben वर्णन करता है, पहले से मौजूद थ्रेड सस्पेंड / रिज्यूम फ़ीचर ( मल्टीटास्किंग का संदर्भ स्विचिंग / स्वैपिंग ) का उपयोग करते हुए, जो प्रोसेसर को कई प्रक्रियाओं / थ्रेड्स को समय स्लाइसिंग का उपयोग करके साझा करने की अनुमति देता है।
क्या यह केवल सामग्री का स्नैपशॉट है और डेटा नहीं है?
यह दोनों है। चूंकि थ्रेडपॉइंट को हिट करने वाले थ्रेड को निलंबित कर दिया गया है, यह निलंबन के समय लाइव डेटा (सीपीयू रजिस्टर, आदि ..) का एक स्नैपशॉट है और प्रोसेसर में पुनर्स्थापित करने के लिए सीपीयू रजिस्टर के आधिकारिक मास्टर को थ्रेड को फिर से शुरू करना चाहिए। । यदि आप डिबगर के उपयोगकर्ता इंटरफ़ेस को पढ़ने और / या सीपीयू रजिस्टर (डिबग की जा रही प्रक्रिया) को बदलने के लिए उपयोग करते हैं, तो यह सिस्टम कॉल का उपयोग करके इस स्नैपशॉट / मास्टर को पढ़ेगा और / या बदल देगा।