Partager via


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

  • 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.

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

Voir aussi

Référence

LanguageService Classe

Microsoft.VisualStudio.Package, espace de noms