2012-09-15 17 views
6

मुझे समस्या है जब मैं C++ पर एक सूची पुनरावृत्ति पर डीबग करने का प्रयास करता हूं।एक्सकोड 4.4 में libC++ के साथ डीबग समस्याएं

int main(int argc, const char * argv[]) 
{ 
// insert code here... 
std::cout << "Hello, World!\n"; 

std::list<int> list; 
list.push_back(1); 
list.push_back(2); 
--> list.push_back(3); //Line before step over 
    for (std::list<int>::const_iterator i = list.begin(); i != list.end(); i++) 
    { 
     std::cout << *i << std::endl; 
    } 
    return 0; 
} 

जबकि डीबगिंग, जब मैं लाइन एक तीर के साथ चिह्नित पर हूँ, जब मैं पर कदम, उस में एक सी से कोड पर कदम रख शुरू होता है ++ फ़ाइल:: 'सूची

मैं एक साधारण परीक्षण एप्लिकेशन बनाया '। मुझे 15 बार की तरह कदम उठाना पड़ेगा जब तक कि यह आखिरकार कथन के अंदर कोड तक नहीं पहुंच जाता।

यह समस्या केवल एक्सकोड 4.4 में होती है। एक्सकोड 4.3 में डीबग पूरी तरह से काम करता है। → ठीक काम करता है संकलक के रूप में

  1. उपयोग LLVM जीसीसी 4.2:

    यहाँ वहाँ विभिन्न परिणामों के साथ कुछ अलग अलग परिदृश्यों हैं।

  2. ऐप्पल एलएलवीएम कंपाइलर 4.0 का उपयोग करें और सी ++ मानक लाइब्रेरी → के लिए libstdC++ (जीएनयू सी ++ मानक लाइब्रेरी) सेट करें → यह ठीक काम करता है।
  3. ऐप्पल एलएलवीएम कंपाइलर 4.0 और सी ++ मानक लाइब्रेरी के लिए libC++ (सीएल ++ 11 समर्थन के साथ एलएलवीएम सी ++ मानक लाइब्रेरी) सेट करें → समस्या होती है।

परियोजना में मैं पर काम कर रहा हूँ, हम (सी ++ 11 समर्थन के साथ LLVM सी ++ मानक पुस्तकालय) का उपयोग कर रहे एप्पल LLVM संकलक 4.0 और libC++ तो मैं परिदृश्य 3 के लिए इस समस्या को हल करने के लिए) की जरूरत है।

क्या कोई जानता है कि क्या हो रहा है और यदि इसके लिए कोई फिक्स है?

+1

पर रिपोर्ट किया जाना चाहिए यह मदद नहीं करता है, लेकिन मैं Xcode के साथ हर समय इस तरह की चीज में चलाता हूं। यह एलडीबीबी की तुलना में जीडीबी के साथ अधिक प्रचलित लगता है, लेकिन न तो महान काम करता है। यह बहुत लंबा समय रहा है। जब मैं इसके बारे में एक बग फाइल करता हूं, आमतौर पर यह तय हो जाता है, लेकिन फिर इसका दूसरा उदाहरण कहीं और पॉप हो जाता है। मुझे यकीन नहीं है कि एक्सकोड में इन समस्याओं का कारण क्यों है लेकिन अन्य लोकप्रिय विकास उपकरण नहीं हैं। – user1118321

उत्तर

2

यह lldb/llvm के साथ libC++ के साथ बातचीत करने में समस्या है, मैंने इसे तब से देखा है जब से हमने इसे सक्षम किया है, हालांकि मुझे लगता है कि केवल libC++/lldb devs यह बताने में सक्षम होंगे।

हालांकि यह कोई समाधान नहीं है, यह कमांड लाइन से llvm 3.1 (एक्सकोड 4.5 के साथ वर्तमान रिलीज) के साथ एक मुद्दा प्रतीत होता है। अगर मैं कार्य करें:,

* thread #1: tid = 0x1c03, 0x00000001000010a2 test`main [inlined] std::__1::__list_imp<int, std::__1::allocator<int> >::begin() at list:543, stop reason = step over 
    frame #0: 0x00000001000010a2 test`main [inlined] std::__1::__list_imp<int, std::__1::allocator<int> >::begin() at list:543 
    540  { 
    541 #if _LIBCPP_DEBUG_LEVEL >= 2 
    542   return iterator(__end_.__next_, this); 
-> 543 #else 
    544   return iterator(__end_.__next_); 
    545 #endif 
    546  } 

मैं मानता हूँ यह वास्तव में:

clang++ -g -O0 -stdlib=libc++ -std=c++11 test.cpp -o test 
lldb test 
breakpoint set --file test.cpp --line 8 

... और फिर, उपयोग करने के लिए 'एन' मुख्य के अंत तक से निकलने के लिए कोशिश यह सूची के स्रोत में कूदता विकास/डिबगिंग समय धीमा कर देता है, और इसे lldb devs