6

Visual Studio 디버거를 차단하여 F11 키를 눌러 특정 클래스와 함수로 들어갈 수있는 방법을 찾고 있습니다. 또는 일부 파일을 차단하여 IDE가 파일을 열지 않도록하고, 예외가있을 때를 제외하고 그냥 골짜기를 밟습니다.디버거가 함수를 단계별로 실행합니다.

나는 바보 같은 소리가 난다는 것을 알고 있지만 스마트 포인터와 다른 도우미 클래스, 많은 오버로드 된 연산자, 간단한 표현식이 최적화에서 사라지는 많은 함수 호출로 구성되어 있으므로 속도 문제가 아니며, 하지만 디버깅 문제로, 많은 파일을 항상 열고 닫는 기능, 실수로 목표 코드를 남기는 기능 등이 있습니다. objectOfIgnoreClass에서 ignoreFunction() 또는 아마도 모든 함수 호출을 통해 스테핑,

stepToThisFunction(objectOfIgnoreClass->ignoreFunction()); 

디버거는이 라인에

누르면 F11은 stepToThisFunction 입력해야합니다 :

여기에 무슨 나는에 대해서 이야기하고, 예입니다.

관리되는 DebuggerStepThrough의 일부 기본 동등 물. CLI를 사용하고 싶지 않습니다. 함수/클래스 앞에 쓰여진 키워드 또는 매크로. 나는 또한 뭔가를 발견, 일부 레지스트리 키 수정,하지만 그게 내가 찾는거야 보이지 않는, 또는 그것이 메커니즘 (나는 심지어 레지스트리 키 가이 일을 이해가 안 돼요) 이해가 안 돼요 . 또한 "중단 점 넣기"와 "커서로 실행"은 해결책이 아닙니다.

답변

6

나는 이것을 정확히 수행 할 매크로가있다. 매우 빠르지는 않지만 매우 유용합니다 (사실 C#으로 변환하여 훨씬 빠른 AddIn에서 사용할 수 있습니다). 그냥 무시하고 F11에 결합 할 기능이나 선택의 또 다른 키를 사용하여 정규 표현식을 사용자 정의 :

Sub StepIntoNextRealFunction() 
    DTE.Debugger.StepInto(True) 
    Dim frame As EnvDTE.StackFrame = DTE.Debugger.CurrentStackFrame 
    Dim fn As String = frame.FunctionName 
    Dim skipRE As Regex = New Regex("operator.*->|MyString::MyString|operator new|operator.*\*|ignoreFunction") 
    If (skipRE.Match(fn).Success) Then 

     DTE.Debugger.StepOut(True) 
     DTE.Debugger.StepInto(True) 
    End If 
End Sub 

편집 : 여기에 C# 버전입니다 - 당신이 추가 기능을 만든 다음에 묶을해야합니다 DTE 개체 :

public void StepIntoNextRealFunction(DTE2 dte) 
    { 
     Debugger2 debugger=(Debugger2)dte.Debugger; 
     debugger.StepInto(true); 
     while (true) { 
      EnvDTE.StackFrame frame = debugger.CurrentStackFrame; 
      string fn = frame.FunctionName; 
      Regex skipRE = new Regex("operator.*->|basic_string.*basic_string"); 

      if ((skipRE.Match(fn).Success)) { 
       debugger.StepOut(true); 
       debugger.StepInto(true); 
      } else { 
       break; 
      } 
     } 
    } 
+0

+1 매우 교활함! – RichieHindle

+0

@SinistraD : 매크로 탐색기를 열고 아직 모듈을 생성하지 않았다면 새로운 모듈을 만들고 그 안에 함수를 붙여 넣은 다음 도구 -> 옵션 -> 키보드에서 키보드 바로 가기를 매핑 할 수 있습니다. 제공된 샘플 매크로 중 일부를 살펴보십시오. 거기에 정말 유용한 것들이 있습니다. –

+0

한편 MSDN에서 발견되었습니다 (내 의견을 삭제했습니다. 회신을 보지 못했습니다). VB.NET을 설치하지 않았기 때문에 이것을 C#으로 다시 작성해야합니다. C# 버전이 있습니까 (게시물에서 언급했거나 .NET을 말하려고 했습니까?). 그렇지 않으면 문제가되지 않습니다. 나는 C#을 말합니다. 그래서 나는 관리 할 것입니다. – SinistraD

3

라인을 마우스 오른쪽 버튼으로 클릭하고 "단계별 맞춤"을 선택하십시오. 그런 다음 원하는 기능을 선택하십시오.

+0

이 진정으로 작동이하지만 직관적이지, 당신이마다 할 필요가, 조금 솔루션보다 영구적이 없다? 매크로 또는 무엇인가 – SinistraD

관련 문제