2012-04-19 1 views
4

저는 최근에 오픈 소스 C++ 프로젝트에 기여하기를 원했습니다. C++에 대한 경험이 부족한 나는 Visual Studio를 IDE로 선택하고 SP1로 업데이트했습니다. 비교적 쉽게 빌드 할 수있는 솔루션을 얻었으며 개요를보기 위해 코드를 조금 탐색하려고했습니다."정의로 이동"/ "선언으로 이동"이 VS2010에서 안정적으로 작동하지 않습니까?

"정의로 이동"/ "선언으로 이동"이 작동하지 않는 것으로 나타났습니다. 두 옵션 모두 소스 코드의 심볼을 마우스 오른쪽 버튼으로 클릭 할 때 사용할 수 있습니다. 그러나 헤더 파일에있을 때 "정의로 이동"은 관련 함수에 대한 선언으로 다시 이동합니다. 그리고 .cc 파일에있을 때, 나는 항상 같은 파일의 정의로 이동합니다. 일부 기능에 대한

1), I는 헤더 파일에서 정의를 탐색 할 수 있지만, 다른 방향은

을 분류됩니다

나는이 우려하는 기능에 대해 알아 차렸다 좀 더 일

2) 정의가 완전히 일치하도록 선언이 변경되면 일부 기능에 대한 탐색을 수정할 수 있습니다 (예 :

header declaration: 
    void buche(sint64 betrag, player_cost type); 
source definition: 
    void karte_t::buche(sint64 const betrag, player_cost const type) 

변화

header declaration: 
    void buche(sint64 const betrag, player_cost const type); 

-> 탐색은 소스 파일에 관련된 기능, 상단의 범위 메뉴의 코드 블록으로 클릭 양방향

3

) 작동 오른쪽 화살표 (생각하는 앞선 선언의 상징 인)와 클래스 이름 (이 함수는 반드시 클래스 멤버입니다)을 표시하는 대신 "(Global Scope)"로 변경합니다.

나는 많은 것을 둘러 보았는데 이것은 비교적 잘 알려진 문제인 것 같다. 사이트에 스레드가 있습니다 : How to get IntelliSense to reliably work in Visual Studio 2008

또한 Microsoft 포럼 (두 개의 하이퍼 링크 만 게시 할 수 있기 때문에 연결할 수 없습니다)에서 여러 스레드를 발견했지만 버그 또는 무언가에 대한 공식 확인이 없습니다. .

답장의 본질은 .ncb 파일 (VS2010의 .sdf 데이터베이스로 대체 됨)을 삭제해야하며, 솔루션을로드 할 때 데이터베이스를 다시 작성하는 옵션을 사용해야한다는 것입니다. . 나는 그 모든 것을 여러 번했는데 아무 소용이 없었다. Stackoverflow의 스레드에 대한 가장 높은 평가를받은 답은 단순히 Intellisense의 버그 (코드 탐색을 담당하는이 자동 완성 구성 요소라는 것을 알았습니까?)에 버그가 있다는 것을 의미하는 것으로 보입니다. 대신 Visual Assist을 사용하십시오. 그러나 VS2008에 관한 질문이 있었고 VS2010을 가리키는 답변이 하나있었습니다. 또 다른 회신은 재귀 참조를 비난했다. 그러나 나는 모든 파일 (확실히 문제를 확인하고 발견 한 몇 안되는 것들)이 경비원을 포함하고 있기 때문에이 프로젝트에서 문제가되지 않을 것이라고 생각한다. 또한 그 프로젝트의 한 코더가 똑같은 문제가 있다는 것을 나에게 확인시켜 주었다. 그러나 나는 비주얼 어시 스턴스에 돈을 쓰는 것에별로 신경 쓰지 않는다. 조금 취미 일 뿐이다 ...

이클립스/자바에 많은 경험을 쌓은 나에게는 그와 같은 상대적으로 필수적인 것 IDE의 기능이 안정적으로 작동하지 않습니다. 물론 정적 코드 분석이 Java보다 C++에서 훨씬 더 어렵다는 것을 이해할 수 있습니다. 그러나 Visual Studio는 많은 개발주기를 거친 상용 제품입니다.

이 게시물을 요약하면 이는 불가 피한 버그입니까?

+0

게시 한 기사 : VS 2008에서 안정적으로 작동하도록 intellisense를 얻는 방법이 저에게 도움이되었습니다. VS 솔루션을 닫고 솔루션의 SDF 파일을 삭제하고 솔루션을 다시 연 다음 솔루션을 다시 빌드하고 문제를 해결합니다. – John

답변

1

필자는 피할 수없는 것으로 생각하는 부분에 따라 다르다고 생각합니다.

내 경험에 따르면 Intellisense 문제는 주로 템플릿, 매크로 또는 둘 모두에 의해 발생하는 것으로 보입니다.

Intellisense가 사용하는 파서/전처리 기가 컴파일러와 같은 방식으로 작동하지 않는 경우가 있는데, 경우에 따라 정보가 누락되어 잘못된 가정을하고있는 경우가 있습니다.

코딩하는 중 갑자기 Intellisense가 손상되어 다른 템플릿 클래스를 사용하거나 다른 템플릿 클래스 또는 이상한 것으로 인스턴스화하는 다소 복잡한 템플릿 클래스를 추가 한 경우 또는 매크로 (다시 말하면, 특히 복잡한 것) 일 경우, 보통 그것이 원인이라고 생각할 수 있습니다. 자주 코드를 재 배열하거나 조금 단순화하거나 무작위로 변경하면 Intellisense를 복구 할 수 있습니다 (종종 .sdf 파일을 삭제 한 후에도 가능함).

이 방법은 다소 불편합니다. 그러나 라이브러리를 부러 뜨리면 악화됩니다. 일부 Boost 라이브러리는 특히 자주 부러지는 경향이 있습니다. 이러한 경우 피하는 것이 훨씬 어렵습니다.

어쨌든 Intellisense는 다소 꾸준히 개선되고 있습니다. VS2010은 VS2008보다 훨씬 정확하고 안정적이며, VS2012는 VS2010보다 우수합니다 (아직 많이 사용하지는 않았지만).

실제로 VS2010에 대한 특정 종속성이없는 경우 VS2012로만 업데이트 할 수 있습니다.

+0

답장 보내 주셔서 감사합니다. 그러면 VS2012에 시도해 보겠습니다. –