2012-09-29 30 views
10

से बाहर निकलने का प्रयास करते समय डीबगर कदम गहरे कदम उठाते हैं मैं एक्सकोड 4.5 के भीतर (ऐप्पल) एलएलवीएम 4.1 का उपयोग कर रहा हूं (लेकिन मैंने पहले बीटा में एक ही चीज़ देखी थी)। मैंने इसे सी ++ 11 को लक्षित किया है और libC++ (नया, सी ++ 11 सक्षम, एसडीडी लाइब्रेरी का एलएलवीएम संस्करण) का उपयोग कर रहा हूं।सी ++ 11 std lib

डीबग बिल्ड में, यदि मैं एक कोड पर कदम उठाने का प्रयास करता हूं जो एक std लाइब्रेरी फ़ंक्शन (जैसे एक std :: वेक्टर कन्स्ट्रक्टर) में कॉल करता है तो डीबगर std lib कार्यान्वयन में बंद हो जाता है और यदि मैं इसे चरणबद्ध करने का प्रयास करता हूं और गहरा! मैं अपने कोड पर वापस आने से पहले कई (कभी-कभी 10 या अधिक) चरण-आउट ले सकता हूं (और मैं इस पहले स्थान पर कभी भी कदम नहीं उठाना चाहता था)।

हमेशा एक _LIBCPP_DEBUG मैक्रो दृश्य में दिखाई देता है, साथ ही _LIBCPP_INLINE_VISIBILITY - लेकिन ये हर जगह होने लगते हैं इसलिए मुझे यकीन नहीं है कि यह एक सहसंबंध है। ऐसा लगता है कि इनलाइनिंग के तरीके के साथ कुछ करने के लिए यह प्रतीत होता है।

मैं इस समस्या के साथ किसी और के किसी भी उदाहरण को खोजने में सक्षम नहीं हूं - फिर भी, मेरे लिए, यह कई बीटा में जारी रहा है - रिलीज में - और ओएस की पूरी तरह से पुनर्स्थापित करने के माध्यम से।

क्या कोई और भी देखा गया है यह? - लेकिन बेहतर अभी भी जानता है कि क्या हो रहा है?

+0

अभी तक मेरे एक्सकोड को अपग्रेड नहीं किया गया है, लेकिन रिलीज मोड में संकलित कोड को डिबग करने पर, डीबगर कभी-कभी थोड़ा जंगली हो सकता है। क्या आप इसे डीबग मोड में संकलित कोड में देख रहे हैं? –

+0

हां, क्षमा करें, यह कहना था कि यह एक डीबग बिल्ड था। मैंने इसे प्रतिबिंबित करने के लिए प्रश्न संपादित कर लिया है। – philsquared

+0

मुझे भी यकीन है कि मैं इसे पहले संस्करण के बीटा में देख रहा था - 4.2 या 4.3, शायद। उस समय मुझे संदेह था कि यह सिर्फ एक बीटा चीज थी और इसे रिलीज द्वारा हल किया जाएगा (नहीं, मैंने रडार सबमिट नहीं किया - मैं बस जीटीएफओ सीएफ। Http://fixradarorgtfo.com)। – philsquared

उत्तर

7

एक्सकोड 4.5 में एलएलडीबी इनलाइन कार्यों पर कदम उठाने में संभाल नहीं करता है। LibC++ मानक लाइब्रेरी में कई फ़ंक्शन हैं जो हमेशा इनलाइन होते हैं, भले ही -O0 पर बनाया गया हो, जो इसे एक समस्या बनाता है। ऐसा लगता है कि जिम इघम ने इस बारे में एक महीने पहले काम किया था, उदाहरण के लिए पहले पैच http://llvm.org/viewvc/llvm-project?view=rev&revision=163044 और अगले सप्ताह या दो में कई अनुवर्ती पैच देखें, लेकिन निश्चित रूप से वे अभी तक lldb के रिलीज़ संस्करण में नहीं हैं। आप सार्वजनिक साइट, http://lldb.llvm.org/ (विशेष रूप से http://lldb.llvm.org/build.html में देखें) से lldb के कमांड लाइन संस्करण का निर्माण और उपयोग कर सकते हैं, lldb/docs/code-sign.txt में कोड हस्ताक्षर निर्देशों का पालन करना याद रखना एकमात्र मुश्किल बात है।

+0

धन्यवाद (क्षमा करें - पहले आपका जवाब नहीं देखा गया)। यह मुझे बेहतर महसूस करता है कि यह सिर्फ मुझे नहीं। लेकिन निराश है कि वर्तमान में कोई कामकाज नहीं है, जिसमें "अनौपचारिक" एलएलडीबी का उपयोग शामिल नहीं है। ऐसा लगता है कि इसे समय में हल करना चाहिए, हालांकि। – philsquared

+0

लगभग क्रिसमस और अभी भी इस समस्या है (या फिर भी, यह किसी भी तरह से है, अभी भी ऐप्पल पर गेंद को छोड़कर)। – WhozCraig

+0

एक्सकोड 4.5.x अभी भी वर्तमान में जारी संस्करण है, इसलिए हां, इनलाइन कोड समर्थन अभी तक जारी किए गए एक्सकोड में उपलब्ध नहीं है। इनलाइन स्टेपिंग कंपाइलर और डीबगर के वर्तमान स्रोतों के साथ सही तरीके से काम करती है - अभी भी कोने के मामले हैं जो अवसर पर एक स्टडी फ़ंक्शन में कदम रखते हैं लेकिन वे कंपाइलर की डीबग जानकारी के नीचे हैं। –

1

मैंने इसे भी देखा है, न केवल libC++ के साथ, libstdC++ (जीएनयू सी ++ मानक लाइब्रेरी, जीसीसी द्वारा उपयोग किया जाता है और सी ++ 03-मोड में क्लैंग द्वारा) के साथ भी। मैंने हमेशा यह पाया है कि यह इनलाइनिंग के कारण है, जो मुझे लगता है कि कभी-कभी डीबग में भी होता है।

+0

मुझे यह मानना ​​है कि मैंने इसे कभी भी C++ 03 मोड में नहीं देखा है - जिसे मैं बहुत अधिक उपयोग करता हूं – philsquared

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