2012-09-15 2 views
6

C++의 목록 반복에서 디버깅하려고 할 때 문제가 있습니다.Xcode 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; 
} 

동안 디버깅, 내가 화살표로 표시된 라인에 오전 때, 나는 이상의 단계 때, 그것은 C의 코드에 개입하기 시작 ++ 파일 : '목록

나는 간단한 테스트 응용 프로그램을 만든 '. 마지막으로 for 문 내부의 코드에 도달 할 때까지 15 번 이상 단계를 밟아야합니다.

이 문제는 Xcode 4.4에서만 발생합니다. Xcode 4.3에서는 디버그가 완벽하게 작동합니다. 그것은 확인을 작동 →

  1. 사용 LLVM GCC 4.2 컴파일러로 :

    여기에 다른 결과 몇 가지 다른 시나리오가 있습니다.

  2. Apple LLVM 컴파일러 4.0을 사용하고 C++ 표준 라이브러리에 libstdC++ (GNU C++ 표준 라이브러리)를 설정하십시오. → 제대로 작동합니다.
  3. Apple LLVM 컴파일러 4.0 및 C++ 표준 라이브러리에 libC++ (LLVM C++ 표준 라이브러리 (C++ 11 지원 포함) 설정) → 문제가 발생합니다.

프로젝트에서 우리는 Apple LLVM 컴파일러 4.0과 libC++ (LLVM C++ 표준 라이브러리 (C++ 11 지원))를 사용하므로 시나리오 3에서이 문제를 해결해야합니다.

누구에게 무슨 일이 일어날 지 알고 있고 수정 사항이 있는지 알고 있습니까?

+1

이렇게하면 도움이되지는 않지만, 저는 항상 이런 종류의 일을 Xcode에서 실행합니다. 그것은 lldb보다 gdb가 더 보편화되어 있지만 어느 쪽도 훌륭하게 작동하지 않습니다. 그것은 아주 오랜 시간이 길을왔다. 그것에 대해 버그를 제기 할 때 대개 고정되어 있지만 다른 인스턴스가 다른 곳에 나타납니다. Xcode가 이러한 문제를 가지고있는 이유는 모르겠지만 다른 인기있는 개발 도구는 그렇지 않습니다. – user1118321

답변

2

lldb/llvm과 libC++와의 상호 작용에 문제가 있습니다. libC++/lldb 개발자 만이 그게 무엇인지 말할 수 있다고 생각합니다.

이것은 해결책이 아니지만 llvm 3.1 (Xcode 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 

... 그리고 그것에서 목록의 소스로 점프, 주 말까지를 단계별로 'n'을 사용하려고 개발/디버깅 시간이 느려지고,보고해야합니다. lldb devs