LanguageService.ValidateBreakpointLocation, méthode
Appelé pour déterminer si l'emplacement donné peut avoir un point d'arrêt appliqué à lui.
Espace de noms : Microsoft.VisualStudio.Package
Assemblys : Microsoft.VisualStudio.Package.LanguageService.9.0 (dans Microsoft.VisualStudio.Package.LanguageService.9.0.dll)
Microsoft.VisualStudio.Package.LanguageService.10.0 (dans Microsoft.VisualStudio.Package.LanguageService.10.0.dll)
Microsoft.VisualStudio.Package.LanguageService.11.0 (dans Microsoft.VisualStudio.Package.LanguageService.11.0.dll)
Microsoft.VisualStudio.Package.LanguageService (dans Microsoft.VisualStudio.Package.LanguageService.dll)
Syntaxe
'Déclaration
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
)
Paramètres
- buffer
Type : Microsoft.VisualStudio.TextManager.Interop.IVsTextBuffer
[in] l'objet d'IVsTextBuffer contenant le fichier source.
- line
Type : System.Int32
[in] le numéro de ligne où le point d'arrêt doit être défini.
- col
Type : System.Int32
[in] l'offset dans la ligne où le point d'arrêt doit être défini.
- pCodeSpan
Type : array<Microsoft.VisualStudio.TextManager.Interop.TextSpan[]
[] retourne TextSpan donnant l'étendue de code affecté par le point d'arrêt si le point d'arrêt peut être défini.
Valeur de retour
Type : System.Int32
Si réussi, retours S_OK ; sinon retourne S_FALSE s'il n'y a aucun code à la position donnée ou retourne code d'erreur (la validation est différée jusqu'à ce que le moteur de débogage soit chargé).
Implémentations
IVsLanguageDebugInfo.ValidateBreakpointLocation(IVsTextBuffer, Int32, Int32, array<TextSpan[])
Remarques
Même si vous n'envisagez pas de prendre en charge l'ValidateBreakpointLocation mais votre langage prend en charge des points d'arrêt, vous devez substituer la méthode d'ValidateBreakpointLocation et retourner une étendue qui contient la ligne et la colonne spécifiées ; sinon, des points d'arrêt ne peuvent pas être définis n'importe où à l'exception de la ligne 1.Vous pouvez retourner E_NOTIMPL pour indiquer que vous ne prenez en charge pas sinon cette méthode mais l'étendue doit toujours être définie.L'exemple montre comment procéder.
Étant donné que le service de langage analyse code, il sait en général ce qui est considéré code et ce qui n'est pas.Normalement, le moteur de débogage est chargé et les points d'arrêt en attente sont liés à la source.Il se produit pour le moment où l'emplacement du point d'arrêt est validé.Cette méthode est un moyen rapide de déterminer si un point d'arrêt peut être défini à un emplacement particulier sans charger le moteur de débogage.
Vous pouvez appliquer cette méthode pour appeler la méthode d'ParseSource avec la raison d'analyser d'CodeSpan.L'analyseur examine l'emplacement spécifié et retourne une étendue identifiant code à cet emplacement.S'il y a code à l'emplacement, l'étendue identifiant que code doit être passé à votre implémentation de la méthode d'CodeSpan dans votre version de la classe d'AuthoringSink.Votre implémentation de la méthode d'ValidateBreakpointLocation extrait cette étendue de votre version de la classe d'AuthoringSink et retours qui couvrent dans l'argument d'pCodeSpan.
La méthode de base retourne E_NOTIMPL.
Exemples
Voici une implémentation possible de la méthode d'ValidateBreakpointLocation qui appelle l'analyseur de méthode d'ParseSource pour obtenir l'étendue de code associée à la position actuelle.Notez que la méthode d'ParseSource est appelée sur le thread actuel ainsi la gestion d'CodeSpan analysent la raison doit être très rapide pour éviter des retards dans placer le point d'arrêt.
La méthode d'GetCodeSpan montrée dans l'exemple est une méthode personnalisée sur l'objet d'MyAuthoringSink et a été ajoutée pour prendre en charge cet exemple d'implémentation.
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;
}
}
}
Sécurité .NET Framework
- Confiance totale accordée à l'appelant immédiat. Ce membre ne peut pas être utilisé par du code d'un niveau de confiance partiel. Pour plus d'informations, consultez Utilisation de bibliothèques à partir de code d'un niveau de confiance partiel.