के भीतर से डीबगर को आमंत्रित करना मैं डेविड हैंनसन द्वारा "सी इंटरफेस एंड इम्प्लिमेंटेशंस" पुस्तक पढ़ रहा हूं। इस अभ्यास सवाल दिलचस्प लगता है और एक समाधान खोजने के लिए असमर्थ हूँ:एक सी प्रोग्राम
कुछ सिस्टम पर, एक कार्यक्रम में जब यह एक त्रुटि का पता लगाया है खुद पर एक डिबगर आह्वान कर सकते हैं। यह सुविधा विकास के दौरान विशेष रूप से उपयोगी होती है, जब दावा विफलता सामान्य हो सकती है।
क्या आप डीबगर का आह्वान करने के तरीके पर एक छोटा सा उदाहरण प्रदान कर सकते हैं।
void handle_seg_fault(int arg)
{
/* how to invoke debugger from within here */
}
int main()
{
int *ptr = NULL;
signal(SIGSEGV, handle_seg_fault);
/* generate segmentation fault */
*ptr = 1;
}
जो कुछ भी आप करते हैं, सुनिश्चित करें कि आप केवल अपने सिग्नल हैंडलर के भीतर से [async सिग्नल सुरक्षित फ़ंक्शंस] (http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html) का उपयोग करें। उदाहरण के लिए, सभी 'exec' प्रकारों में से केवल' execve' और 'execle' सिग्नल हैंडलर (एसिंक सिग्नल कैचिंग) के संदर्भ में निष्पादित करने के लिए सुरक्षित हैं। अब, गीलेर आमतौर पर ऐसा करने के लिए बुद्धिमान है (एसआईजीएसईजीवी जैसे "राज्य भ्रष्ट एकल" के रूप में) एक और बात है। मैं (ए) एक बाहरी डीबगर के साथ जाऊंगा या (बी) coredump पोस्ट मॉर्टम का निरीक्षण करें। –