Convalidando i punti di interruzione (managed package Framework)
Un punto di interruzione indica che l'esecuzione del programma deve essere interrotta in un determinato punto di mentre è in esecuzione in un debugger. Un utente può inserire un punto di interruzione su qualsiasi riga nel file di origine, poiché l'editor non contiene alcuna informazione della validità di una posizione valida per un punto di interruzione. Quando il debugger viene avviata, tutti profondi punti di interruzione (chiamati in attesa dei punti di interruzione) sono associati alla posizione appropriata nel programma in esecuzione. Contemporaneamente i punti di interruzione vengono convalidati per garantire che contrassegnino le posizioni valide di codice. Ad esempio, un punto di interruzione in un commento non è valido, perché non è presente codice in tale posizione nel codice sorgente. il debugger disabilita i punti di interruzione non validi.
Poiché il servizio di linguaggio oscuro del codice sorgente visualizzato, è possibile convalidare i punti di interruzione prima che il debugger sia avviato. È possibile eseguire l'override del metodo di ValidateBreakpointLocation per restituire un intervallo specificato un percorso valido per un punto di interruzione. La posizione del punto di interruzione verrà convalidata quando il debugger viene avviata, ma l'utente riceve una notifica dei punti di interruzione non validi senza attendere il debugger per caricare.
Implementazione di supporto per convalidare i punti di interruzione
Il metodo di ValidateBreakpointLocation assegnata la posizione del punto di interruzione. L'implementazione di deve decidere se la posizione è valida e scegliere questo restituendo un intervallo di testo che identifica il codice associato alla posizione di riga il punto di interruzione.
Restituire S_OK se la posizione è valida, o S_FALSE se non è valido.
se il punto di interruzione è valido l'intervallo di testo è evidenziato con il punto di interruzione.
If the breakpoint is invalid, an error message appears in the status bar.
Esempio
In questo esempio viene illustrata l'implementazione del metodo di ValidateBreakpointLocation che chiama il parser per ottenere l'intervallo del codice (se presenti) nella posizione specificata.
Questo esempio si presuppone che sia stato aggiunto un metodo di GetCodeSpan alla classe di AuthoringSink che convalida l'intervallo di testo e restituisce true se è una posizione del punto di interruzione valida.
using Microsoft VisualStudio;
using Microsoft.VisualStudio.Package;
using Microsoft.VisualStudio.TextManager.Interop;
namespace TestLanguagePackage
{
class TestLanguageService : LanguageService
{
public override int ValidateBreakpointLocation(IVsTextBuffer buffer,
int line,
int col,
TextSpan[] pCodeSpan)
{
int retval = VSConstants.S_FALSE;
if (pCodeSpan != null)
{
// Initialize span to current line 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);
TestAuthoringSink sink = req.Sink as TestAuthoringSink;
TextSpan span = new TextSpan();
if (sink.GetCodeSpan(out span))
{
pCodeSpan[0] = span;
retval = VSConstants.S_OK;
}
}
}
}
return retval;
}
}
}
Vedere anche
Altre risorse
Funzionalità del servizio di linguaggio (managed package Framework)