IVsLanguageDebugInfo2::ValidateInstructionpointLocation Method (IVsTextBuffer^, Int32, Int32, array<TextSpan>^)
Validates the given position as a place to set an instruction or break point.
Assembly: Microsoft.VisualStudio.TextManager.Interop.8.0 (in Microsoft.VisualStudio.TextManager.Interop.8.0.dll)
int ValidateInstructionpointLocation( IVsTextBuffer^ pBuffer, int iLine, int iCol, array<TextSpan>^ pCodeSpan )
Parameters
- pBuffer
-
Type:
Microsoft.VisualStudio.TextManager.Interop::IVsTextBuffer^
[in] An IVsTextBuffer containing the text to examine.
- iLine
-
Type:
System::Int32
[in] Line to examine.
- iCol
-
Type:
System::Int32
[in] Column to examine.
- pCodeSpan
-
Type:
array<Microsoft.VisualStudio.TextManager.Interop::TextSpan>^
[out] Returns a TextSpan object containing the span of the code surrounding the specified location.
Return Value
Type: System::Int32If the method succeeds, it returns S_OK. If the location cannot contain an instruction point, returns S_FALSE; otherwise, returns an error code.
From textmgr.idl:
HRESULT IVsLanguageDebugInfo2::ValidateInstructionpointLocation( [in] IVsTextBuffer *pBuffer, [in] long iLine, [in] long iCol, [out] TextSpan2 *pCodeSpan );
This method validates the given position as a place to set an instruction point. If the location is valid, and pCodeSpan is non-null, the span is filled in with the extent of the statement at which execution would stop. If the position is known not to contain code, this method returns S_FALSE.
Warning |
|---|
Even if you do not intend to support the ValidateInstructionpointLocation method, you must implement this method and return a span that contains the specified line and column; otherwise, instruction or breakpoints cannot be set anywhere except line 1. You can return E_NOTIMPL to indicate that you do not otherwise support this method but the span must always be set. The example shows how this can be done. |
Here is an implementation of this method that shows how to set the span.
using Microsoft.VisualStudio; using Microsoft.VisualStudio.TextManager.Interop; namespace MyLanguagePackage { public class MyLanguageService : IVsLanguageInfo, IVsLanguageDebugInfo, IVsLanguageDebugInfo2 { public int ValidateInstructionpointLocation(IVsTextBuffer buffer, int line, int col, TextSpan2[] pCodeSpan) { int retval = VSConstants.E_NOTIMPL; if (pCodeSpan != null) { // Make sure the span is set to at least the current // position by default. pCodeSpan[0].iStartLine = line; pCodeSpan[0].iStartIndex = col; pCodeSpan[0].iEndLine = line; pCodeSpan[0].iEndIndex = col; } if (buffer != null) { // Use your parser to obtain the span that describes the // the code containing the specified position. If the span // is valid, return S_OK with the valid span; otherwise, // returns S_FALSE (leaving the default span alone). // // GetCodeSpanForLocation() is a helper function not shown. retval = VSConstants.S_FALSE; TextSpan span = new TextSpan(); if (GetCodeSpanForLocation(buffer, line, col, out span)) { pCodeSpan[0].iStartLine = span.iStartLine; pCodeSpan[0].iStartIndex = span.iStartIndex; pCodeSpan[0].iEndLine = span.iEndLine; pCodeSpan[0].iEndIndex = span.iEndIndex retval = VSConstants.S_OK; } } return retval; } } }
