2014-05-21 1 views
3

저는 매버릭스에서 C++ 11을 사용하는 lldb를 얻으려고 몇 주 동안 노력해 왔습니다. 안정적인 작동을 얻지 못했습니다. 누구가 이것을 관리 했습니까? 정확히 어떤 단계를 밟았 니? 내가 찾을 수누구든지 lverb 표현식 평가를 통해 매버릭스에서 C++ 11을 사용할 수 있습니까?

증상은 다음과 같습니다

(1) 내가 코드에 벡터 v가있는 경우, 나는 "v.size()"를 호출 할 수 없습니다와 같은 기본적인 표준 기능을 호출 할 수 없습니다 (이전 응답이 동의에 StackOverflow 이).

(2) 일반적으로 데이터 유형 및 클래스에 대해 항상 혼란스러워합니다. 때로는 간단한 일을 이해하고 때로는 이상한 오류 메시지를 표시하고 사용자 유형을 잘못 해석하는 경우가 있습니다.

(3) 코드를 중단하고 다른 함수를 호출하면 lldb가 가끔 혼란스러워지며 기묘한 런타임 동작이 발생합니다 (예 : lldb에서 함수를 호출하고 논리적으로 불가능 함). 결과, 호출 스택 또는 메모리가 어떻게 든 엉망이 된 것처럼).

(4) 때로는 lldb가 그냥 포기하고 스택에있는 위치를 추적하지 못하는 것 같습니다.

나는 이것들이 모호하지만, lldb를 표현식 평가 (breakpoints가 아니라 디버거를 사용하여 함수와 메소드를 호출하는 것)에 광범위하게 사용하고 lldb를 사용했는지? 필자는 매우 복잡한 데이터 구조를 가지고 있으며이를 조작하고 인터랙티브 디버거를 사용하여 대화식으로 (즉, repl) 메소드를 호출해야합니다.

질문의 부분은 아니지만 런타임에 메서드를 호출하고 함수를 대화식으로 평가할 수있는 진정한 C++ 11 디버거를 알고 있고 MacOS Mavericks에서 안정적으로 작동한다면 매우 감사하게 생각합니다.

N.B. 초기 MacOS 버전은 매버릭스와 완전히 다릅니다.

답변

2

나는 2-4에 대해 알지 못합니다. 실제로는 충분히 구체적이지 않습니다. 그러나 # 1은 OS X의 새로운 C++ 표준 라이브러리에서 문제가되는 것으로 드러났습니다. 대부분의 std :: * 함수를 인라 인 (inline)하고 라인 사본을 생성하지 않는 것은 매우 공격적입니다. 실제로 대개 정확히 원하는 것입니다. 그러나 디버깅에는 불편합니다!

당신은 일반적으로 같은 오류를 참조하십시오

(lldb) expr my_vec.size() 
error: call to a function 'std::__1::vector<int, std::__1::allocator<int> >::size() const' ('_ZNKSt3__16vectorIiNS_9allocatorIiEEE4sizeEv') that is not present in the target 

그리고 호출하는 기능이 없기 때문이 코드를 통해 뿌려 만 인라인 버전이있다,입니다. C++ 11 당신은 넣어 일부 특정 템플릿 클래스의 함수를 호출 할 것이다 사전에 알고 있다면 당신은이 문제를 해결할 수 있습니다에서

: 예를 들어

template class std::vector<int>; 

, 어딘가에 코드입니다. #ifdef DEBUG 구조의 일종으로 이것을하고 싶다면, 이런 식으로 코드를 전달하고 싶지는 않을 것입니다.

+0

원하는 경우 디버거를 구성하여 STL 기능을 호출 할 수있는 방법이 많이 있습니다. 첫째, lldb는 소스 코드에 액세스 할 수 있으므로 기본 데이터 유형을 파악할 수 있어야합니다. 그럴 수도 있겠지만, 매버릭스에서 잠시 동안 C++에서 lldb를 사용 해본 적이 있습니까? 내가 언급 한 문제가 2-4 개나 없었습니까? 디버깅 환경이 Mac의 C++에 얼마나 나쁜지에 대해 매우 실망했습니다. 어떻게하면 많은 기본 기능을 호출 할 수없는 디버거를 사용할 수 있습니까? 내 일이 힘들어, 내 프로그램의 모든 기능에 대한 래퍼를 만들어야 해. – kdog

+0

lldb는 "데이터 형식 지정자"를 구현하기 위해 "소스 코드 액세스"를 사용합니다.예를 들어, int 벡터가있는 경우 벡터를 인쇄하면 데이터 포맷터가 크기를 인쇄하고 내용이 배열 인 것처럼 인쇄합니다. 현재 할 수없는 일은 앱에서 사용한 모든 빌드 설정에 해당하는 템플릿 버전을 컴파일하므로 사용하는 클래스와 일관성이 있습니다. 그게 아직 존재하지 않는 컴파일러의 도움이 필요합니다. 그러나 많은 경우에 데이터 포맷터는이를 불필요하게 만듭니다. –

+0

물론 문제를 보여주는 몇 가지 예를 제공 할 수 있다면 bugreporter.apple.com을 통해 파일을 보내주십시오. lldb를 스스로 더 잘 만드는 데 도움이되는 피칭은 오픈 소스 프로젝트입니다. 실제로 상황을 개선하는 두 가지 방법입니다. –