gpt4 book ai didi

c# - 如何从 visual studio 调试输出窗口中读取文本

转载 作者:太空宇宙 更新时间:2023-11-03 19:34:53 25 4
gpt4 key购买 nike

我读过几篇文章,告诉您如何从附加组件(特别是 visual studio 2008 集成包,通过 visual studio 2008 SDK 1.1)向 visual studio 的输出窗口添加文本,但没有如何从输出窗口读取文本的示例。我的目标是在调试某个应用程序(TRACE 输出和可能的标准输入/标准输出)时从调试输出窗口解析文本。 IVsOutputWindowPane 接口(interface)没有从输出窗口读取文本的方法。文档似乎暗示这是可能的,但没有提供示例:

http://msdn.microsoft.com/en-us/library/bb166236(VS.80).aspx

引用:此外,OutputWindow 和 OutputWindowPane 对象添加了一些更高级别的功能,以便更轻松地枚举输出窗口 Pane 并从 Pane 中检索文本。

我希望能够订阅一个新的文本行到达时触发的事件,类似于 StreamReader 的异步读取。

最佳答案

有可能,只是路途遥远:

ServiceProvider -> IVsOutputWindow -> GetPane( debugwindow ) -> IVsUserData -> GetData( wpftextviewhost ) -> IWpfTextViewHost -> IWpfTextView -> TextBuffer -> Changed 事件。

假设你有一个来自其他地方的 VS IServiceProvider(vsix 扩展/无论什么,全局服务提供商),并且没有任何错误检查,它看起来像这样:

IVsOutputWindow outWindow = ServiceProvider.GetService(typeof(SVsOutputWindow)) as IVsOutputWindow;
Guid debugPaneGuid = VSConstants.GUID_OutWindowDebugPane;
IVsOutputWindowPane pane;
outWindow.GetPane(ref debugPaneGuid, out pane);
// from here up you'll find in lots of other stackoverflow answers,

// the stuff from here down is interesting to this question
IVsUserData userData = (IVsUserData)pane;
object o;
Guid guidViewHost = DefGuidList.guidIWpfTextViewHost;
userData.GetData(ref guidViewHost, out o);

IWpfTextViewHost viewHost = (IWpfTextViewHost)o;
IWpfTextView textView = viewHost.TextView;
textView.TextBuffer.Changed += YourTextChangedHandlerHere;

每当输出窗口获得更多数据时,您的文本更改处理程序就会被调用。您不一定会逐行获取它,但您很可能会获取需要自己处理的大块。

极有可能上述某些内容在 2010 年甚至不存在于 VS 中。但现在存在!

关于c# - 如何从 visual studio 调试输出窗口中读取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2395837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com