双击以转到输出窗口中的源

Aks*_*elK 13 visual-studio output-window

在Visual Studio中构建项目时,"输出"窗口将输出构建过程的状态,其中包括错误和警告.双击这些行将在编辑器中打开包含该错误/警告的文件.

现在,是否有可能通过Debug.WriteLine的输出或类似的东西获得该功能?因此,当调试窗口输出时,例如

Buffering: 13:03:20 to 13:03:21
Run Code Online (Sandbox Code Playgroud)

我可以双击它并被带到BufferClass.cs,第45行,因为那是Debug.WriteLine调用的位置.

这可能是通过.net库还是通过Visual Studio扩展?

Aks*_*elK 14

我会继续自己回答这个问题.

为了能够直接跳转到源文件,请格式化您的消息,如下所示:

string.Format("{0}({1})", filePath, lineNumber);
Run Code Online (Sandbox Code Playgroud)

这样,Visual Studio将自动添加双击功能并将您直接带到源.

此外,如果您使用Visual Studio 2012中的新功能,如此处所述:来电者详细信息,您可以像这样实现您的日志方法:

private void LogData(string message, 
                     [CallerMemberName] string callerName = "",
                     [CallerLineNumber] int lineNumber = -1,
                     [CallerFilePath] string filePath = "")
    {
        Debug.WriteLine(message);
        Debug.WriteLine(string.Format("    {0}({1})", filePath, lineNumber));
    }
Run Code Online (Sandbox Code Playgroud)

此外,在末尾添加":error"或":warning"会使Visual Studio将其显示为红色或黄色.如果有任何文章进一步描述,我真的很想知道.

  • 官方文章:[格式化自定义构建步骤或构建事件的输出](https://learn.microsoft.com/en-us/cpp/ide/formatting-the-output-of-a-custom-build-step -或构建事件) (2认同)

Rim*_*mel 5

好吧,这个问题(和答案)似乎有点过时了,所以让我刷新一下:

在Visual Studio 2013中,以下格式是唯一一种导致链接到回显该消息的文件/行的格式:

C#

{0}({1}): <message here>
Run Code Online (Sandbox Code Playgroud)

对于C / C ++,请尝试一下

#define STRINGX(x) #x
#define STRING(x) STRINGX(x)
#define MY_LOG(msg) __pragma(message(__FILE__"(" STRING(__LINE__) "): " msg))
Run Code Online (Sandbox Code Playgroud)

如果您在结尾括号后不包含冒号,或者文件名和行号之间有空格,则它将不会链接到源代码。