2014-10-23 10 views
5

लिनक्स/जीडीबी दुनिया से आ रहा है, डिफ़ॉल्ट रूप से जीडीबी एक एसईजीवी का पता लगाने पर प्रोग्राम के निष्पादन को बाधित करता है, डिफ़ॉल्ट हैंडलर प्रक्रिया को साफ करने से पहले।LIGB ब्रेक SIGSEGV

एलएलडीबी इसी तरह की चाल कैसे कर सकता है? वर्तमान में प्रक्रिया अभी बाहर निकल जाता है, यह असंभव पश्व-अनुरेखन आदि


संपादित क्वेरी करने के लिए कर रही है: proccess handle -p true -n true -s true का प्रयास किया - कोई परिणाम :(

(lldb) process handle -p true -n true -s true SIGSEGV 
NAME  PASS STOP NOTIFY 
========== ===== ===== ====== 
SIGSEGV  true true true 
(lldb) run 
Process 97630 launched: '/Volumes/My Finder Extensions 1/My_Daemon.app/Contents/PlugIns/My_ShellExt.appex/Contents/MacOS/My_ShellExt' (x86_64) 
Process 97630 exited with status = 0 (0x00000000) Terminated due to signal 9 

संपादित साथ: अधिक जानकारी:

(lldb) bt all 
error: invalid thread 

मुझे संदेह है कि lldb भ्रष्ट के साथ अच्छा नहीं खेलता एड स्टैक्स - मैं _NSExtensionMain एंट्री पॉइंट, या वहां से लाइन के नीचे कुछ समस्या को ट्रैक करने का प्रयास कर रहा हूं।

+1

क्या आप वाकई अपने प्रोग्राम को SIGSEGV प्राप्त कर रहे हैं? सिग्नल 9 सिगिल है, और इसे डीबगर द्वारा पकड़ा नहीं जा सकता है (जब तक, संभवतः, ऐसा करने के लिए कुछ माच-विशिष्ट तरीका नहीं है)। –

+1

यहां कुछ अजीब चल रहा है। प्रक्रिया के लिए हमें बाहर निकलने की स्थिति (0) मिली, इसलिए यह वास्तव में सामान्य रूप से बाहर निकल गया। निश्चित नहीं है कि हम यह भी सोचते हैं कि इसे सिग्नल 9 क्यों मिला है। बीटीडब्ल्यू, यदि आप किसी प्रोग्राम को डिबग कर रहे हैं और इसे सिगकिल मिल जाता है, तो यह सिगकिल के साथ डीबगर में रुक जाएगा। डीबगर सिगकिल्स को पकड़ सकता है, जो नहीं कर सकता वह उन्हें दबा रहा है। –

+0

क्या आपके लिए चरण-दर-चरण डीबगिंग का प्रयास करना संभव है? मुझे लगता है कि आपका प्रोग्राम आईवीटी या पीसीबी जैसे 'संवेदनशील डेटा' के एक हिस्से को ओवरराइट करता है, यही कारण है कि आप 'बैकट्रैक' नहीं कर सकते हैं। – VivienG

उत्तर

3

आपको को this के अनुसार lldb पर टाइप करना चाहिए।

(lldb) प्रक्रिया संभाल SIGSEGV --notify सच --pass सच --stop सच

+0

यह उचित लगता है - लेकिन वास्तव में मेरे मामले में काम नहीं करता है, कोई विचार नहीं। – qdot

+1

क्या आप अपना आवेदन दूरस्थ लक्ष्य पर चलाते हैं? मेरे पास इसी तरह का मुद्दा था जब मैंने एक दूरस्थ लक्ष्य पर JTAG के माध्यम से एक सी अनुप्रयोग को डीबग किया था। मुझे ओपनोकॉड का उपयोग अंतिम रूप में करने के लिए किया गया था जो मुझे चाहिए। लेकिन मुझे नहीं लगता कि यह तुम्हारा मामला है, है ना? – VivienG

+0

स्थानीय लक्ष्य, कुछ हद तक अजीब एप्लिकेशन एंट्री पॉइंट (लिनक्स/विन 32 कोड का पुन: उपयोग करने के लिए अधिकतर सी ++ में एक एप्लीकेशन एक्सटेंशन लिखने का प्रयास कर रहा है) – qdot

0

मैं एक त्वरित परीक्षण कार्यक्रम बनाया है,

#include <signal.h> 
#include <stdio.h> 
#include <unistd.h> 

void handler (int in) 
{ 
    puts ("signal received"); 
} 

int main() 
{ 
    signal (SIGSEGV, handler);  
    kill (getpid(), SIGSEGV); 
    return 0; 
} 

तो मैं यह जहां डिबगिंग की कोशिश मैं lldb बता SIGSEGV पर बंद करने के लिए:

(lldb) br s -n main 
(lldb) r 
(lldb) pr h -p true -n true -s true SIGSEGV 
NAME  PASS STOP NOTIFY 
========== ===== ===== ====== 
SIGSEGV  true true true 
(lldb) c 
Process 5024 resuming 
Process 5024 stopped 

(lldb) bt 
* thread #1: tid = 0x19d6ae, 0x00007fff8f27fc7e libsystem_kernel.dylib`__kill + 10, queue = 'com.apple.main-thread', stop reason = signal SIGSEGV 
    * #0: 0x00007fff8f27fc7e libsystem_kernel.dylib`__kill + 10 
    #1: 0x0000000100000f25 a.out`main + 53 at a.c:13 
    #2: 0x00007fff8c0e65c9 libdyld.dylib`start + 1 
(lldb) c 
Process 5024 resuming 
signal received 
Process 5024 exited with status = 0 (0x00000000) 
(lldb) 

ठीक ताकि हम क्या expec तरह लग रहा है टेड। मैं भी बस पर संकेत अग्रेषित करने के लिए रोके बिना lldb पूछ सकते हैं:

(lldb) br s -n main 
(lldb) r 
(lldb) pr h -p true -n true -s false SIGSEGV 
NAME  PASS STOP NOTIFY 
========== ===== ===== ====== 
SIGSEGV  true false true 
(lldb) c 
Process 5055 resuming 
Process 5055 stopped and restarted: thread 1 received signal: SIGSEGV 
signal received 
Process 5055 exited with status = 0 (0x00000000) 
(lldb) 

और कहा कि ऐसा लगता है कि हम क्या चाहते थे किया दिखता है: lldb ने हमें सूचित किया है कि संकेत प्राप्त किया गया था और उसके बाद प्रोग्राम को भेजा।

यह मैक ओएस एक्स पर एक्सकोड 6 स्थापित है।

संबंधित मुद्दे