좋아, 주위에 파고의 조금 후에 이 작업을 수행 할 수 있습니다 -하지만 모든 경우에 작동하지 않을 것.
주의 할 점은 매크로를 사용하므로 인라인 대리자와의 작동을 보장 할 수 없습니다. 또는 실제로 어떤 것을 돌려 줄 필요가있는 메소드를 사용한다. 중단 점에 도달하면 @juergen d 및 @Erno가 설명하는 프로세스를 자동화합니다. 매우 간단한 경험적 방법을 사용하여 현재 함수의 끝 부분을 찾습니다.
먼저이 매크로를 매크로 환경에 추가해야합니다 (VS에서 ALT + F11을 사용하여 엽니 다). 바로 클릭하고 When hit...
메뉴 옵션을 명중 - 난 그냥 자리에두고 :
Sub ExitStack()
'get the last-hit breakpoint
Dim breakPoint As EnvDTE.Breakpoint
breakPoint = DTE.Debugger.BreakpointLastHit()
'if the currently open file is the same as where the breakpoint is set
'(could search and open it, but the debugger *should* already have done that)
If (DTE.ActiveDocument.FullName = breakPoint.File) Then
Dim selection As EnvDTE.TextSelection = DTE.ActiveDocument.Selection
Dim editPoint As EnvDTE.EditPoint
'move the cursor to where the breakpoint is actually defined
selection.MoveToLineAndOffset(breakPoint.FileLine, breakPoint.FileColumn)
Dim codeElement As EnvDTE.CodeElement
codeElement = DTE.ActiveDocument.ProjectItem.FileCodeModel.CodeElementFromPoint(selection.ActivePoint, vsCMElement.vsCMElementFunction)
'if a function is found, move the cursor to the last character of it
If Not (codeElement Is Nothing) Then
Dim lastLine As EnvDTE.TextPoint
lastLine = codeElement.GetEndPoint()
selection.MoveToPoint(lastLine)
selection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstText)
'execute the SetNextStatement command.
'Has to be done via ExecuteCommand
DTE.ExecuteCommand("Debug.SetNextStatement")
End If
End If
End Sub
을 그것을 밖으로 돌진 한대로, 수 이제 당신이 중단 점을 설정할 수있는이 코드는 아마도 좋지 않다 (이것은 VS2010에서만 작동합니다). ScottGu는 이것을 this 블로그 게시물에 설명합니다.
대화 상자에서
, 당신은 단지에 붙여 넣기 한 ExitStack
매크로를 찾을 수 있습니다.
실행 디버거 코드 부착 중단 점에 명중 할 때 함수의 코드의 나머지 부분은 생략한다. 이것은 조건과 같은 다른 디버거 트릭을 따라야합니다.
주 - 내가 가지고있는 문제를 해결하기 위해 this SO을 사용했습니다. 원래 디버거의 SetNextStatement 메서드를 직접 호출하고 작동하지 않았다.
반환해야하는 메서드가 어떻게 동작 할 것인지는 잘 모르겠다. 이론적으로 반환 값은 로컬 일 때 반환해야하지만 어떤 경우에는 반환해야합니다. 사실 이것은 단순히 작동하지 않을 것입니다!
마찬가지로 중단 점이 try/catch 블록에 있으면 try/catch를 종료해야만 다음 명령문을 그 외부 어딘가에 설정할 수 있기 때문에 작동하지 않습니다.
아주 멋지다. 나는 여전히 누군가가 비 매크로, 가치를 반환하는 답변을 가지기를 바라고 있지만, 지금까지는 이것이 최고의 선택이다. –
@Protectorone 자신 만의 디버거를 작성하지 않는 한 - 하나도 존재하지 않습니다. 메소드가 지역 변수를 리턴하면, 이것을 사용하여 리턴하기 전에 로컬을 설정하기 위해 watch (또는 다른 매크로 사용)를 사용할 수 있습니다. –