prosource

Visual Studio 2008에서 IntelliSense가 안정적으로 작동하도록 하는 방법

probook 2023. 8. 1. 20:38
반응형

Visual Studio 2008에서 IntelliSense가 안정적으로 작동하도록 하는 방법

C/C++ 프로젝트에서 일할 때 IntelliSense가 안정적으로 작동하도록 하는 방법을 아는 사람이 있습니까?파일 10개 중 1개 정도는 작동하는 것 같습니다.Visual Studio 2005는 2008년보다 훨씬 더 나은 것 같습니다.

편집: 반드시 해결책은 아니지만 해결 방법은 다음과 같습니다.

Visual Studio 2008에서 IntelliSense가 안정적으로 작동하도록 하는 방법

괜찮은 IntelliSense 시스템을 원한다면 아마도 가장 좋은 방법일 것입니다.

Native C++ Intelliense는 Visual Studio 버전에서 안정적으로 작동하지 않습니다.두 가지 일반적인 문제가 있습니다.

헤더 파일 경로가 올바르게 설정되지 않았습니다.Intelligence가 작동하지 않는 유형을 찾으면 IDE를 사용하여 각 헤더 파일을 클릭하여 해당 유형이 포함된 파일을 찾습니다(#include를 마우스 오른쪽 버튼으로 클릭하고 Open Document...(문서 열기)).형식을 선언하는 파일을 찾기 전에 이 작업이 실패하면 문제가 됩니다.헤더 파일 검색 경로가 올바르게 설정되었는지 확인합니다.

그리고.

인텔리센스 데이터베이스가 손상되었습니다.이런 일은 항상 일어납니다.솔루션을 닫고 .ncb 파일을 삭제한 다음 솔루션을 다시 열어야 합니다.다른 질문에 대한 답변으로 제가 사용하는 매크로를 여기에 올렸습니다.


또한 전처리기는 인텔리센스를 혼동할 수 있으므로 빌드 중에 #defines도 인텔리센스에 사용할 수 있는지 확인합니다.그 외에 무엇이 그것을 깨뜨릴 수 있을지 모르겠습니다.저는 포워드 선언과 관련된 특별한 문제를 보지 못했습니다.

저는 또한 IntelliSense가 때때로 어떤 큰 프로젝트에서 '잃어버린' 것이라는 것을 깨달았습니다.전혀 모릅니다.

이것이 우리가 Visual Studio 하위 디렉터리(C:\Program Files\Microsoft Visual Studio 8\VC\vcpackages)에서 dll feacp.dll을 삭제하여 Visual Assist(토마토 소프트웨어에서)를 구입하고 IntelliSense를 비활성화한 이유입니다.

이것은 해결책이 아니라 해결책일 뿐입니다.

Visual Assist(시각적 지원)를 받을 수 없는 사람들에게는 희망이 있는 것 같습니다.

인텔리센스 재구축 중

설치(또는 제거)된 추가 기능이 있습니까?저는 그것이 제 지능에 영향을 미친다는 것을 발견했습니다.

또한 도구->옵션->텍스트 편집기->모든 언어 "구성원 자동 나열" 및 "매개 변수 정보"가 선택 해제되어 있는지 확인합니다.

저는 VS2008을 C++용으로 사용하지 않고 VB & C#만 사용하지만, 인텔리센스가 작동하지 않을 때(VS2003/2005/2008에 해당) 프로젝트/파일의 일부가 손상되었기 때문이라는 것을 알게 되었습니다. 대개는 잘못된 참조나 코드입니다.

VB 및 C#은 참조된 어셈블리를 반영하여 인텔리전트 트리를 구축할 수 있기 때문에 인텔리전트 지원 기능이 훨씬 향상되었습니다.

C++는 함수 프로토타입을 위해 포함 파일을 걸어야 하며, 경로가 올바르지 않으면 일부 프로토타입 헤더를 찾을 수 없습니다.

그 끔찍한 리팩터 유틸리티가 내 코드를 파괴한 후에 나의 텔리센스에 대한 수정이 필요했습니다.문제는 #include 자체가 포함된 클래스 헤더 파일이었습니다.재귀 참조는 텔리센스를 삭제합니다.이것의 증상은 텔리센스가 다른 클래스는 볼 수 있지만 현재 클래스는 볼 수 없는 경우입니다.또한:

#pragma를 한 번 사용하여 중복된 헤더 로드 제거

이제 프로젝트를 로드하는 데 훨씬 더 오랜 시간이 걸린다면, 완료 지원이 부족한 원인이 되는 충돌을 이해하려고 노력하는 것이 의미가 있습니다.

영향을 받는 클래스 개체가 하나뿐인 경우가 많습니다. 어떤 파일(일반적으로 헤더)을 볼지 표시합니다.

@존 리처드슨 / @조나단 홀랜드

내 포함은 올바르게 설정되어 있으며, 문제가 없습니다.NCB 리빌드도 여러 번 시도해봤지만 100% 해결되지는 않습니다.

저는 그것이 클래스의 순방향 선언과 관련이 있을 수 있다고 생각합니다. 예를 들어 헤더 파일에 포함되는 복잡성을 줄이기 위해 우리는 보통 다음과 같은 작업을 합니다.

class MyPredeclared;

class SomeOtherClass
{
private:
    MyPredeclared* m_pPointer;
}

그게 망치는 걸까요?다른 생각 있나요?당신의 프로젝트가 커질수록 그것은 확실히 악화됩니다.

저는 매우 짜증나는 문제가 있었습니다. 인텔리센스는 명백한 이유 없이 일부 파일에서만 작동했습니다.구글을 뒤지는 데 몇 시간이 걸렸지만, 저는 마침내 그 이유가 정말 재귀적인 참조라는 것을 이해했습니다!다음을 사용했습니다.

#ifndef CLASS_H
#define CLASS_H
...
#endif

기호의 재정의를 피하기 위해, 그리고 이것은 때때로 큰 프로젝트에서 지능을 깨뜨립니다.

그러나 ifndef-define-endif를 주석으로 달면 충분합니다.

#pragma once 

헤더 파일의 시작 부분에서 여전히 재정의를 피하고 IntelliSense가 다시 작동하도록 합니다. =)=)

적어도, 이것은 나에게 효과가 있었습니다. 유용하기를 바랍니다.

치어스 프란체스코

템플릿 등이 광범위하게 사용되는 다소 큰 C++ 수치 선형 대수 라이브러리를 개발하고 있기 때문에 최근 VS2008에서 IntelliSense를 공부했습니다.인텔리센스는 프로젝트에 대한 작업을 잠시 중단했고, 저는 어느 정도 포기했습니다. 하지만 이제 인텔리센스가 없으면 정말 짜증이 나서 조사하기 시작했습니다.제가 알아낸 것은 다음과 같습니다.

인텔리센스를 "파기"하는 코드가 포함된 파일이 있다고 가정하면,

  • 헤더에 있지만 Intellisense가 #included, 나머지 파일에서 여전히 작동합니다.
  • 포함되어 있지만 내부에 선언된 유형이 없는 경우에도 작동합니다.
  • 이러한 유형이 포함되어 있고 내부에 선언된 유형이 사용되는 경우에도 여전히 작동할 수 있습니다(구성원에 대한 IntelliSense는 없고, 지정된 유형이 발생한 후 IntelliSense는 없지만 적어도 이전에는 글로벌 이름과 인수 정보).
  • Intellisense가 하나의 .cpp 파일에서 깨져도 문제가 있는 코드가 포함되지 않거나 사용되지 않는 다른 파일에서 여전히 작동할 수 있습니다(그러나 만약 그것이 나쁘게 충돌한다면, 그것은 나에게는 일어나지 않았지만, 전체 프로젝트에서 비활성화될 것이라고 생각합니다).
  • 컴파일이 완료된 후 IntelliSense가 업데이트된 것 같습니다(때로는 이전 버전이 아닌 경우도 있음)
  • 고장난 코드를 내부에 넣는 것#if 0,/* .. */또는//시키는 것 .

제가 사용한 C++ 기능 중에서 실제로 Intelli sense를 몇 가지 해제할 수 있습니다.

  • 매개 의 '>' 또는 과 템릿매변의수 '> ='와 비교(예:static_assert<(size > 0)>)
    • 괄호를 .static_assert<((size > 0))>되지 않음)
    • '<=를합니다.static_assert<0 < size>
    • 값을 열거형에 저장하고 템플릿을 특수화하는 데 사용하여 해결됩니다.
  • 를 비활성화합니다( 명적전예인는수정보화문함템수플릿시예:▁argument).function<type>(args))
    • 아마 해결할 수 없을 것입니다(매크로로 포장할 수도 있습니다), 하지만 저는 그것이 깨지는 것을 견딜 수 있습니다.
  • 유형의 예: " 템릿구유인형화스스턴원"):Matrix::MakeMatrixType<3, 3>::Result r;
    • 정확히 왜 이런 일이 일어나는지 이해하기 어렵습니다(아이겐 사용 때문일 가능성이 높습니다).
    • IS가 작동하지 않는 별도의 .cpp로 이러한 코드를 이동하여 해결합니다(항상 가능한 것은 아님).

이러한 문제 중 일부는 적절한 C++ 파서보다 덜 강력한 "간편화된" 파싱 때문인 것으로 보입니다.위의 정보를 바탕으로 Intellisense가 기존 코드에서 작동하도록 하는 "신뢰할 수 있는" 방법은 다음과 같습니다.

  1. 프로젝트 앱Main.합니다. 더미로 Main.cpp를 생성합니다.void main() {}그 안에
  2. 파일 중 하고, 파중하포함고하를나일더헤손된상,▁files고,math.h
  3. 빌드(Intellisense가 안정적으로 업데이트하려면 컴파일해야 함)
  4. 들어 하여 IntelliSense가 합니다.sin(그리고 논쟁의 도움이 나타나는지 확인합니다.때때로, 이것은 효과가 있지만, 회원들의 도움은 효과가 없습니다 - 그러니 그것도 시도해 보세요.
  5. 헤더 파일에 있는 무언가의 인스턴스를 만들고, 빌드하고, 그것이 IS를 죽일 수 있는지 확인합니다.
  6. 범죄자 파일에서 코드를 제거하고 3단계로 이동합니다.
  7. 문제가 있는 코드를 찾아 수정한 후 5단계에서 코드를 제거한 후 다시 시도합니다.
  8. 반 전체가 잘 되도록 만든 후에 다음 반을 예로 들며...

문제가 발생한 코드의 위치를 쉽게 파악할 수 있었습니다(이 경우 97개의 문제가 발생한 프로젝트 중 하나의 파일만 해당).여기서 'Build'는 컴파일을 의미하며, 링크 단계를 완료할 필요가 없으므로 해결되지 않은 외부는 괜찮습니다. IS는 이와 상관없이 업데이트해야 합니다.

IS를 업데이트하는 또 다른 방법은 모든 것을 저장하고 작업 공간을 닫고 .ncb 파일을 삭제한 후 다시 여는 것입니다.그런 다음 상태 표시줄에서 'Intellisense 업데이트 중... (N)'이 사라질 때까지 기다립니다(N은 0을 향해 계산되며, N은 문제가 발생한 곳의 진행 상황을 표시합니다).저는 이것이 꽤 지루하다고 생각했습니다.

흥미로운했습니다. 이 I have 이이문기다다문제를해니위변해경 (Visual Studio 2010): 습했결하니습발했견것을대흥운로제.#include이전의 헤더 파일에 있는 sintax(이전의 프로젝트는 VS 2005로 완료되었고 VS 2010을 사용하여 다시 시작됨):

#include <myfile.h> 

그리고 나는 이것을 해결합니다:

#include "myfile.h"

인텔리젼스 후에 올바르게 작동하기 시작!이것이 도움이 되기를 바랍니다!

설정을 재설정해야 했습니다.

C:\Program Files\Microsoft Visual Studio 9.0\공통7\IDE>devenv.exe /설정 재설정

이것에 관한 실타래

문제는 .vcproj 파일에 있습니다.

디버그 모드에서 릴리스 모드로 전환하여 빌드한 다음 인텔리전트 라이센스를 사용해 보면 작동합니다.

Visual Studio를 닫습니다.프로젝트에서 .vcproj 파일을 검색하는 경우 해당 파일을 편집하고 Additional Include Directory의 처음 두 인스턴스를 검색합니다.이 값은 "....\,..."와 같아야 합니다.".../."보다는 "..."

프로젝트를 다시 시작하고 인텔리센스가 건물을 완성할 때까지 기다렸다가 수정해야 합니다.

언급URL : https://stackoverflow.com/questions/39474/how-to-get-intellisense-to-reliably-work-in-visual-studio-2008

반응형