2015-01-18 4 views
5

मुझे एक बहुत बड़ी परियोजना में ढेर ओवरफ्लो को डीबग करने की आवश्यकता है। थोड़ा सा वाल्ग्रिंड खेलने के बाद, यह सी में ढेर ब्लॉक ओवररन्स का पता लगाने के लिए एकदम सही टूल जैसा लगता है, इसलिए मैं इसके साथ अपना आईओएस ऐप चलाने के लिए चाहता हूं।क्या आईओएस सिम्युलेटर और डिवाइस पर वालग्रिंड चलाने के लिए संभव है?

मैंने ओएस एक्स योसेमेट पर ट्रंक से वाल्ग्रिंड बनाया और स्थापित किया है और जानबूझकर ढेर अतिप्रवाहों के साथ एक परीक्षण कार्यक्रम लिखा है और सत्यापित किया है कि वालग्रिंड पकड़ता है और उन्हें रिपोर्ट करता है।

अब मैं इसके साथ सिम्युलेटर में एक परीक्षण ऐप चलाने के लिए चाहता हूं। मैंने पढ़ा है कि इसे execl() का उपयोग करके आईओएस सिम्युलेटर में चलाया जा सकता है, लेकिन जब मैं ऐसा करता हूं, तो मुझे कंसोल में निम्न त्रुटि दिखाई देती है।

dyld: लापता LC_DYLD_INFO लोड आदेश

उसके बाद, अनुप्रयोग EXC_BAD_ACCESS साथ dyldbootstrap में दुर्घटना होगा :: rebaseDyld()। क्या यहां कुछ और जरूरी है? वालग्रिंड स्पष्ट रूप से arm64 का भी समर्थन करता है। क्या मेरे ऐप के साथ वाल्ग्रिंड निष्पादन योग्य पैकेज करना संभव है और इसे किसी डिवाइस पर चलाया जा सकता है?

#define VALGRIND "/usr/local/bin/valgrind" 

int main(int argc, char * argv[]) { 

    if (argc >= 2 && strcmp(argv[1], "-valgrind") == 0) { 
     if (execl(VALGRIND, VALGRIND, argv[0], NULL) < 0) { 
      NSLog(@"Failed to relaunch under valgrind"); 
      exit(1); 
     } 
     NSLog(@"Running under valgrind!!"); 
    } 

    @autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    } 
} 
+2

मुझे एक ही समस्या मिली। Valgrind गैर सिम्युलेटर निष्पादन योग्य ठीक पर चलता है। यह execl चाल पहले काम करने के लिए प्रयोग किया जाता है ... – dbv

+2

हाय, क्या आपको अभी तक समाधान मिला है? :) वास्तव में इस मुद्दे के लिए एक समाधान की सराहना करेंगे। –

उत्तर

0

आप xcrun simctl spawn का उपयोग सिम्युलेटर पर एक मनमाना प्रक्रिया शुरू कर सकते हैं, लेकिन आप सिम्युलेटर वातावरण में MacOS निष्पादनयोग्य नहीं चल सकता। यह मैकोज़ के साथ कर्नेल साझा करता है लेकिन अन्यथा अलग है। आपको आईओएस के लिए वालग्रिंड बनाना होगा, फिर उसे डिवाइस की डेटा निर्देशिका में छोड़ दें और इसे स्पॉइंग करने का प्रयास करें।

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