正在驗證中斷點 (受管理的封裝架構)
中斷點表示偵錯工具正在執行時,應該從特別的點停止程式執行。 使用者可以在原始程式檔,在任何一行上放置中斷點,因為編輯器] 中並不知道是由什麼組成的中斷點是有效的位置。 偵錯工具啟動時,所有標記的中斷點 (稱為暫止中斷點) 會繫結至執行中的程式中適當的位置。 同時驗證中斷點,以確保它們可以將有效的程式碼位置來標示。 比方說,在註解的中斷點不正確,因為在原始程式碼中的該位置沒有程式碼。 偵錯工具會停用不正確的中斷點。
語言服務所知所顯示的程式碼,因為它可以在偵錯工具就會啟動之前,請先驗證中斷點。 您可以覆寫ValidateBreakpointLocation方法來傳回指定有效的中斷點位置的範圍。 當偵錯工具就會啟動,但不正確的中斷點的通知使用者不需等到載入偵錯工具時,中斷點的位置仍然會進行驗證。
實作支援驗證中斷點
ValidateBreakpointLocation方法會指定中斷點的位置。 您的實作必須決定位置有效,且表示它會傳回用來識別程式碼的文字範圍關聯的行位置中斷點。
如果中斷點是有效的文字範圍會連同中斷點反白顯示。
如果中斷點不正確,則會在狀態列上出現錯誤訊息。
範例
這個範例會示範實作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;
}
}
}