Metoda LanguageService.ValidateBreakpointLocation —
Wywoływana w celu ustalenia, jeśli w danej lokalizacji może mieć przerwania, stosowane do niego.
Przestrzeń nazw: Microsoft.VisualStudio.Package
Zestawy: Microsoft.VisualStudio.Package.LanguageService.9.0 (w Microsoft.VisualStudio.Package.LanguageService.9.0.dll)
Microsoft.VisualStudio.Package.LanguageService.10.0 (w Microsoft.VisualStudio.Package.LanguageService.10.0.dll)
Microsoft.VisualStudio.Package.LanguageService.11.0 (w Microsoft.VisualStudio.Package.LanguageService.11.0.dll)
Microsoft.VisualStudio.Package.LanguageService (w Microsoft.VisualStudio.Package.LanguageService.dll)
Składnia
'Deklaracja
Public Overridable Function ValidateBreakpointLocation ( _
buffer As IVsTextBuffer, _
line As Integer, _
col As Integer, _
pCodeSpan As TextSpan() _
) As Integer
public virtual int ValidateBreakpointLocation(
IVsTextBuffer buffer,
int line,
int col,
TextSpan[] pCodeSpan
)
Parametry
- buffer
Typ: Microsoft.VisualStudio.TextManager.Interop.IVsTextBuffer
[w] IVsTextBuffer Obiektu zawierającego plik źródłowy.
- line
Typ: System.Int32
[w] Numer wiersza, gdzie ma być utworzony punkt przerwania.
- col
Typ: System.Int32
[w] Przesunięcie w wierszu można ustawić punkt przerwania.
- pCodeSpan
Typ: array<Microsoft.VisualStudio.TextManager.Interop.TextSpan[]
[out] Zwraca TextSpan w zakresie kodu, dotkniętych punkt przerwania, jeżeli punkt przerwania można ustawić podając.
Wartość zwracana
Typ: System.Int32
Jeśli się powiedzie, zwraca S_OK; w przeciwnym razie zwraca S_FALSE , jeśli w danym miejscu nie ma kodu lub zwraca kod błędu (Sprawdzanie poprawności jest odroczone do czasu załadowania silnika debugowania).
Implementuje
IVsLanguageDebugInfo.ValidateBreakpointLocation(IVsTextBuffer, Int32, Int32, array<TextSpan[])
Uwagi
Nawet, jeżeli nie zamierza się obsługiwać ValidateBreakpointLocation , ale język obsługuje punkty przerwania, należy zastąpić ValidateBreakpointLocation metody i powrotu, span, zawierający określonego wiersza i kolumny; w przeciwnym razie punktów przerwania nie można ustawić dowolne miejsce z wyjątkiem linii 1.Można zwrócić E_NOTIMPL do wskazują, że w przeciwnym razie nie obsługują tej metody, ale zakres musi być zawsze ustawione.W przykładzie pokazano, jak można to zrobić.
Ponieważ usługa języka analizuje kod, ogólnie zna to, co uważa się za kod, a co nie.Normalnie silnik debugowania jest ładowany i oczekujące punkty przerwania są powiązane ze źródłem.Jest w tej chwili, którego położenie punktów przerwania jest sprawdzana.Ta metoda jest szybkim sposobem określenia, jeśli punkt przerwania można ustawić w określonej lokalizacji bez ładowania silnika debugowania.
Można zaimplementować tę metodę, aby wywołać ParseSource metodę z powodu analizy z CodeSpan.Parser analizuje określonej lokalizacji i zwraca wartość z zakresu identyfikacji kodu w tej lokalizacji.Jeśli w lokalizacji jest kod, span, że kod identyfikacyjny powinien zostać przekazany do implementacji CodeSpan metody w wersji AuthoringSink klasy.Następnie implementacji ValidateBreakpointLocation metoda pobiera ten zakres z wersji AuthoringSink klasy i zwraca, obejmujących w pCodeSpan argument.
Metody podstawowej zwraca E_NOTIMPL.
Przykłady
W tym miejscu jest jedną z możliwych implementacji ValidateBreakpointLocation wywołuje metodę ParseSource parser metoda uzyskania span kod skojarzony z bieżącej lokalizacji.Należy zauważyć, że ParseSource wywoływana jest metoda w bieżącym wątku tak obsługę CodeSpan Przyczyna analizy musi być bardzo szybki uniknąć opóźnień przy wprowadzaniu do obrotu punkt przerwania.
GetCodeSpan w przykładzie metoda jest metody niestandardowe na MyAuthoringSink obiektu i została dodana do obsługi tego przykładem implementacji.
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.Package;
using Microsoft.VisualStudio.TextManager.Interop;
namespace MyLanguagePackage
{
public class MyLanguageService : LanguageService
{
public override int ValidateBreakpointLocation(IVsTextBuffer buffer,
int line,
int col,
TextSpan[] pCodeSpan)
{
int retval = HRESULT.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)
{
IVsTextLines textLines = buffer as IVsTextLines;
if (textLines != null)
{
Source src = this.GetSource(textLines);
if (src != null)
{
TokenInfo tokenInfo = new TokenInfo();
string text = src.GetText();
ParseRequest req = CreateParseRequest(src,
line,
col,
tokenInfo,
text,
src.GetFilePath(),
ParseReason.CodeSpan,
null);
req.Scope = this.ParseSource(req);
MyAuthoringSink sink = req.Sink as MyAuthoringSink;
TextSpan span = new TextSpan();
retval = VSConstants.S_FALSE;
if (sink != null && sink.GetCodeSpan(out span))
{
pCodeSpan[0] = span;
retval = VSConstants.S_OK;
}
}
}
}
return retval;
}
}
}
Zabezpieczenia programu .NET Framework
- Pełne zaufanie do bezpośredniego wywołującego. Tego elementu członkowskiego nie można używać w kodzie częściowo zaufanym. Aby uzyskać więcej informacji, zobacz Przy użyciu bibliotek z częściowo zaufanego kodu..