共用方式為


正在驗證中斷點 (受管理的封裝架構)

中斷點表示偵錯工具正在執行時,應該從特別的點停止程式執行。 使用者可以在原始程式檔,在任何一行上放置中斷點,因為編輯器] 中並不知道是由什麼組成的中斷點是有效的位置。 偵錯工具啟動時,所有標記的中斷點 (稱為暫止中斷點) 會繫結至執行中的程式中適當的位置。 同時驗證中斷點,以確保它們可以將有效的程式碼位置來標示。 比方說,在註解的中斷點不正確,因為在原始程式碼中的該位置沒有程式碼。 偵錯工具會停用不正確的中斷點。

語言服務所知所顯示的程式碼,因為它可以在偵錯工具就會啟動之前,請先驗證中斷點。 您可以覆寫ValidateBreakpointLocation方法來傳回指定有效的中斷點位置的範圍。 當偵錯工具就會啟動,但不正確的中斷點的通知使用者不需等到載入偵錯工具時,中斷點的位置仍然會進行驗證。

實作支援驗證中斷點

  • ValidateBreakpointLocation方法會指定中斷點的位置。 您的實作必須決定位置有效,且表示它會傳回用來識別程式碼的文字範圍關聯的行位置中斷點。

  • 傳回S_OK位置是否正確,或S_FALSE才有效。

  • 如果中斷點是有效的文字範圍會連同中斷點反白顯示。

  • 如果中斷點不正確,則會在狀態列上出現錯誤訊息。

範例

這個範例會示範實作ValidateBreakpointLocation (如果有的話) 取得的程式碼剖析器會在指定的位置呼叫的方法。

本範例假設您已新增GetCodeSpan方法,以AuthoringSink類別來驗證的文字範圍,並傳回true如果它是一個有效的中斷點位置。

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;
        }
    }
}

請參閱

其他資源

語言服務功能 (受管理的封裝架構)