【问题标题】:allowing to insert breakpoint in visual studio editor extension允许在 Visual Studio 编辑器扩展中插入断点
【发布时间】:2014-12-16 06:55:07
【问题描述】:

Add Syntax Highlighting to IElisonBuffer

我关注这个问题并实现了我的 Visual Studio 编辑器扩展。 我一切正常:语法突出显示,完成......但我无法添加断点,即使选项在正确的上下文菜单中(禁用)

我还需要做什么才能为我的编辑器启用此功能吗?

【问题讨论】:

    标签: c# visual-studio visual-studio-2012 breakpoints vspackage


    【解决方案1】:

    嗯,要让断点真正执行任何操作,您需要 implement a debugger(通过 AD7 接口等)。

    但要让实际的断点切换工作,您需要做的就是实现IVsLanguageDebugInfo interface(以及可选的IVsLanguageDebugInfo2IVsLanguageDebugInfo3 以获得更多控制)。 (我建议您在已经实现 IVsLanguageInfo 的语言信息对象上这样做。)不要忘记注册您的实现,以便 VS 知道它。

    ValidateBreakpointLocation() 将在用户按下 F9 等时被调用,并且在其中您应该将断点跨度设置为行的适当边界(或行的一部分,具体取决于您的语言,例如您可能在一个 lambda 或想要突出显示一条语句,除了行上的任何尾随 cmets),然后返回 VSConstants.S_OK

    【讨论】:

    • 感谢您的回答。基本上我只想切换工作,它在我的编辑器窗口中被禁用。这个编辑器是默认的 C# 编辑器,所以我真的不想自定义它,只是希望它作为默认编辑器工作。这些是我拥有的东西:IVsTextLines docData、IVSCodeWindow codeWindow、IVsTextView textView、IVsTextBuffer textBuffer、IWpfTextViewHost textViewHost。所以我不确定在实现 IVsLanguageDebugInfo 之后如何将我的实现链接到我已经拥有的上述内容。
    • 更多信息:在这种情况下,我只是从文件路径 (.cs) 创建一个 InvisibleEditor,然后从该 InvisibleEditor 获取 DocData,它应该具有语言服务 (C#)。如果 DocData 已经有语言服务,我不知道为什么我必须提供 IVsLangueDebugInfo。我的假设是默认的 C# 语言服务应该提供所有的默认实现,因为在这种情况下我不会创建任何新语言。
    • @user:嗯,很有趣。我不知道可以重用现有的语言服务,并且我同意我希望断点在这种情况下已经可以工作。要将 info 对象提供给 VS,我相信您需要在语言服务对象本身上实现接口(刚刚重新阅读了文档)。但听起来你没有。你能解释一下你想要完成的事情吗?也许还有其他方法。
    • 基本上我想要一个 C# 文件有 2 个编辑器视图。一种用于全视图,一种用于局部视图(放大 1 个功能)。我遵循以下教程:joshvarty.wordpress.com/2014/08/01/…,除了在自定义编辑器中插入断点外,它按预期工作。这个想法是重用默认的 C# 编辑器(可能带有默认的语言服务),并给它不同的文本跨度来显示部分视图。
    • @user:啊,我明白了。 (顺便说一句,有趣的想法。)我想我误解了你的问题。恐怕我不知道如何在自定义编辑器中启用断点,抱歉。
    猜你喜欢
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 2012-07-11
    相关资源
    最近更新 更多