【问题标题】:How do I make my `OutputDebugString` messages be clickable links in Visual Studio output window?如何使我的“OutputDebugString”消息成为 Visual Studio 输出窗口中的可点击链接?
【发布时间】:2014-04-04 03:44:52
【问题描述】:

我通过OutputDebugString() 输出日志/警告/错误消息,因此它们可以在 Visual Studio 的“输出”窗口中读取。

我想让这些消息成为链接。单击后,他们将打开预定义的源文件并将光标放在预定义的行上,就像编译器错误发生的那样。

我该怎么做?

【问题讨论】:

    标签: visual-studio debugging


    【解决方案1】:

    以特殊方式格式化输出字符串:

    file_path(line): message
    

    其中file_path 是单击打开文件的完整绝对路径,line 是要放置的行光标数,而“消息”是其他任何内容。

    当您双击并打开文件时,Visual Studio 会解析这样的字符串。

    C++ 和boost::format 的示例:

    #include <windows.h>
    #include <boost/format.hpp>
    #include <string>
    
    int main()
    {
        std::string errMsg = "Yay! Fancy link!";
        std::string formatted =(boost::format("%s(%i): in function \"%s\": %s\n\n")  
                              % __FILE__ % __LINE__ % __FUNCTION__ % errMsg ).str();
        OutputDebugStringA(formatted.c_str());
    }
    

    【讨论】:

    • file_path 可以是相对路径,但我不确定相对于 what。完整路径始终有效。 (无关,宏非常适合添加路径和行号)
    • 嗯,不,这在我的机器上肯定行不通。您可能应该提及您已安装的可点击插件以及 VS 版本。
    • @Hans 我现在正在使用带有大量插件的最新 VS2013,所以我也在 Windows 7 虚拟机上检查了它,我有一个带有 Visual Studio 2010 全新安装的快照(没有插件,没有服务包)。我使用了 sprintf 而不是 boost。它工作正常。我想我也在 VS2008 中使用过它,但不确定因为它是很久以前的。确保大括号周围(内部或外部)和冒号之前没有任何空格,但冒号之后有空格。另外,我不知道如何处理带有空格的路径。
    • @Hans 尝试直接传递给OutputDebugStringA 类似c:\projects\foo\foo\main.cpp(9): in function "main": Yay! Fancy link!。它对你有用吗?
    • 我在this post 找到了答案。您必须双击该行。这不直观。
    猜你喜欢
    • 2011-03-03
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 2021-07-02
    相关资源
    最近更新 更多