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

时间:2008-10-17 14:51:23

标签: windows visual-studio visual-c++

我有一个像这样的头文件:

#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将收集这些消息并将其列为错误列表中的警告。它这样做是因为文本格式匹配警告。但是,我不希望它们一直显示为警告,我宁愿它们显示在错误列表的“消息”窗格中。

  

如何格式化你输入的行   “输出窗口”使Visual Studio成为可能   将自动神奇地显示出来   “错误列表”的“消息”选项卡   窗口?

我在上面的代码中为消息设置的格式看起来像来自其他输出的消息,但不会以相同的方式获取。

一位同事告诉我,我可能需要编写一个“自定义自动化对象”来写入“消息”窗格。这看起来很痛苦,特别是因为只需通过适当的格式化即可在“错误”窗格和“警告”窗格中输入条目。这是一条可能的途径吗?

我们正在使用非托管C ++,因此我们不能仅依赖托管(.NET)工具。我们不想用钩子扩展VS.

6 个答案:

答案 0 :(得分:5)

我相信他们只是 忘了 关于添加其他类别:info。 至少它没有在外部工具的输出格式中指定。

引用:“类别必须是'错误'或'警告'。案例无关紧要。与原点一样,类别不得本地化。”

链接:http://blogs.msdn.com/msbuild/archive/2006/11/03/msbuild-visual-studio-aware-error-messages-and-message-formats.aspx

答案 1 :(得分: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);

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

答案 2 :(得分:1)

我试图让它也能正常工作,据我所知,除非你真的为VS编写自己的插件来解析输出并生成任务,否则它是不可能的。这将是一个非常方便的功能,我希望他们在未来的某个时刻添加它(不能自己编写插件,太多其他小项目继续花费时间:L)

最后,我刚刚选择输出它作为警告,这不是太糟糕,看到我如何尝试修复所有警告(或者如果它们是故意的,请关闭那个警告。代码和注释,如果不明显为什么警告被忽略)

答案 3 :(得分:0)

我可能无法正确理解你的问题,但无论如何我都会试一试。

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

这可能就是你所需要的。

祝你好运!

答案 4 :(得分:0)

您是否尝试过自定义任务列表关键字?

This page表明可以这样做。我建议你从那里继续阅读,以防你还没有。

答案 5 :(得分:-2)

您是否可以在代码中使用“跟踪”命令?这将只在“输出”窗口中放置您告诉它的任何文本。因此,为了放置错误消息,您可能需要先将它们格式化。