Metodo LanguageService.ValidateBreakpointLocation
chiamato per determinare se la posizione specificata può avere un punto di interruzione applicato a.
Spazio dei nomi: Microsoft.VisualStudio.Package
Assembly: Microsoft.VisualStudio.Package.LanguageService.9.0 (in Microsoft.VisualStudio.Package.LanguageService.9.0.dll)
Microsoft.VisualStudio.Package.LanguageService.10.0 (in Microsoft.VisualStudio.Package.LanguageService.10.0.dll)
Microsoft.VisualStudio.Package.LanguageService.11.0 (in Microsoft.VisualStudio.Package.LanguageService.11.0.dll)
Microsoft.VisualStudio.Package.LanguageService (in Microsoft.VisualStudio.Package.LanguageService.dll)
Sintassi
'Dichiarazione
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
)
Parametri
- buffer
Tipo: Microsoft.VisualStudio.TextManager.Interop.IVsTextBuffer
[in] IVsTextBuffer oggetto che contiene il file di origine.
- line
Tipo: System.Int32
[in] Il numero di riga in cui il punto di interruzione deve essere impostato.
- col
Tipo: System.Int32
[in] L'offset nella riga contenente il punto di interruzione deve essere impostato.
- pCodeSpan
Tipo: array<Microsoft.VisualStudio.TextManager.Interop.TextSpan[]
[out] restituisce TextSpan fornendo l'ambito del codice interessato dal punto di interruzione se il punto di interruzione può essere impostato.
Valore restituito
Tipo: System.Int32
Se l'operazione riesce, restituisce S_OK; in caso contrario S_FALSE se non c " è un codice nella posizione specificata o restituisce un codice di errore (la convalida viene rinviata fino a caricare il motore di debug.
Implementa
IVsLanguageDebugInfo.ValidateBreakpointLocation(IVsTextBuffer, Int32, Int32, array<TextSpan[])
Note
Anche se non si intende supportare ValidateBreakpointLocation ma il linguaggio supporta i punti di interruzione, è necessario eseguire l'override di ValidateBreakpointLocation il metodo e restituisce un intervallo che contiene la riga e la colonna specificata; in caso contrario, i punti di interruzione non possono essere impostati in qualsiasi posizione eccetto la riga 1.È possibile restituire E_NOTIMPL per indicare che non supportate in caso contrario questo metodo ma l'intervallo è necessario impostare sempre.Nell'esempio viene illustrata tale operazione.
Poiché il servizio di linguaggio analizza il codice, conosce in genere ciò che viene considerato codice e quali no.In genere, il motore di debug viene caricato e dei punti di interruzione in attesa sono associati al database di origine.Viene eseguita correntemente nella posizione del punto di interruzione viene convalidata.Questo metodo rappresenta un modo rapido per determinare se è possibile impostare un punto di interruzione in una determinata posizione senza caricare il motore di debug.
È possibile implementare questo metodo da chiamare ParseSource metodo con il motivo di analisi CodeSpan.Il parser esamina la posizione specificata e restituisce un intervallo che identifica il codice in tale posizione.Se c " è un codice nella posizione, l'intervallo che identifichi il codice deve essere passato all'implementazione di CodeSpan metodo nella versione di AuthoringSink classe.Quindi l'implementazione di ValidateBreakpointLocation il metodo recupera il formato dalla versione di AuthoringSink classificare e restituisce che si estendono in pCodeSpan argomento.
Il metodo di base E_NOTIMPL.
Esempi
Di seguito è un'implementazione possibile di ValidateBreakpointLocation metodo che chiama ParseSource parser del metodo per ottenere l'intervallo di codice associata alla posizione corrente.si noti che ParseSource viene chiamato il metodo sul thread corrente così la gestione di CodeSpan il motivo di analisi deve essere molto rapido evitare ritardi in posizionare il punto di interruzione.
GetCodeSpan il metodo mostrato nell'esempio è un metodo personalizzato su MyAuthoringSink oggetto e si aggiungono per supportare questa implementazione di esempio.
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;
}
}
}
Sicurezza di .NET Framework
- Attendibilità totale per il chiamante immediato. Impossibile utilizzare questo membro in codice parzialmente attendibile. Per ulteriori informazioni, vedere Utilizzo di librerie da codice parzialmente attendibile.