如何使输出显示在Visual Studio 2005错误列表的“消息”窗格中?

21

我有一个这样的头文件:

#ifndef __GEN_NOTE_MARKERS_TO_DEVELOPERS_HPP__
#define __GEN_NOTE_MARKERS_TO_DEVELOPERS_HPP__

  #ifdef _DEBUG

    // macros for turning a number into a string
    #define STRING2(x)  #x
    #define STRING(x)  STRING2(x)

    #ifdef TRIAGE_MESG_AS_WARNING
      #define TRIAGE_TODO_TAG(description)    __pragma(message(__FILE__"("STRING(__LINE__)") : warning : TRIAGE TO-DO: " STRING(description) ))
      #define TRIAGE_FIXTHIS_TAG(description) __pragma(message(__FILE__"("STRING(__LINE__)") : warning : TRIAGE FIXTHIS: " STRING(description) ))
    #else
      #define TRIAGE_TODO_TAG(description)    __pragma(message(__FILE__"("STRING(__LINE__)") : message : TRIAGE TO-DO: " STRING(description) ))
      #define TRIAGE_FIXTHIS_TAG(description) __pragma(message(__FILE__"("STRING(__LINE__)") : message : TRIAGE FIXTHIS: " STRING(description) ))
    #endif
  #else
    #define TRIAGE_TODO_TAG(description)
    #define TRIAGE_FIXTHIS_TAG(description)
  #endif

#endif // __GEN_NOTE_MARKERS_TO_DEVELOPERS_HPP__

如何在Visual Studio 2005中将输出的注释显示在“错误列表”窗口的“消息”选项卡中?当定义'TRIAGE_MESG_AS_WARNING'时,Visual Studio将收集这些信息,并将它们作为警告列在“错误列表”中。由于文本格式与警告相匹配,因此会这样做。但是,我不希望它们一直显示为警告,而是希望它们显示在“错误列表”的“消息”窗格中。我已经设置好了上面代码中消息的格式,看起来像其他输出的消息,但不会以同样的方式被收集。

我的同事建议我需要编写一个“自定义自动化对象”以便向“消息”窗格中写入内容。那似乎很麻烦,特别是通过适当的格式设置可以轻松地在“错误”窗格和“警告”窗格中获得条目。这是一个可行的方案吗?

我们使用非托管(C++),所以不能只依赖托管(.NET)工具。我们不想使用钩子来扩展VS。


1
有人尝试在Visual Studio 2010中让这个工作吗? - bzlm
6个回答

6

我认为短时间内不会有任何神奇的解决方案出现。看起来由于某种原因,它对外部工具(甚至是宏生成的消息)都是不可访问的。 - Aaron

2
好的,我已经查找过了,如果您安装了Visual Studio SDK,则可以执行此操作。
我在这里找到了这个链接 here 我认为您需要使用Microsoft.VisualStudio.Shell名称空间。
上述链接中的代码片段如下:
//Get the "Error List Window"

ErrorListProvider errorProvider = new ErrorListProvider(this);
Task newError = new Task();
newError.ErrorCategory = TaskErrorCategory.Error; // or TaskErrorCategory.Warning for warnings
newError.Category = TaskCategory.BuildCompile;
newError.Text = "Some Error Text";
errorProvider.Tasks.Add(newError);

我还没有尝试过这个,所以如果你成功了,请在这里回帖以备将来参考。

1

我也尝试过让它工作,但据我所知,除非你真的为VS编写自己的插件来解析输出并生成任务,否则这是不可能的。这将是一个非常方便的功能,我希望他们在未来的某个时候添加它(我懒得自己编写插件,因为有太多其他小项目需要处理:L)

最终,我选择将其输出为警告,这还不错,因为我尝试修复所有警告(或者如果它们是有意的,则关闭该代码段的警告并注释说明忽略警告的原因不明显)


我的同事也说了类似的话。你和他可能是对的。这位同事告诉我,VS 2010甚至没有消息窗格。感谢您的回答! - Aaron

0
你尝试过自定义任务列表关键字吗? 这个页面建议可以这样做。我建议你从那里继续阅读,以防你还没有这样做过。

我实际上对任务列表不感兴趣,我对错误列表的消息窗格感兴趣。谢谢回答。 - Aaron

0

可能我没有正确理解你的问题,不过我还是会尽力回答。

你是否看过TraceSwitch实现?你可以实现不同的监听器,并将信息输出到各种来源,如文本、控制台等。

这可能是你所需要的。

祝好运!


看起来那只适用于托管代码。如果我使用的是托管代码,那绝对是一个好线索,但我正在使用非托管的C++。 - Aaron
是的,我不确定它是否适用于您的情况,但我想至少为您提供一个开端! :) - scootdawg

-2
你能不能不在你的代码中使用"Trace"命令?这只会把你告诉它的任何文本放置在输出窗口中。所以对于放置错误消息,你可能需要先进行格式化。

我对错误列表中的消息窗格感兴趣,而不是输出窗口。感谢您的回答,但它并没有解决我的问题。 - Aaron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接