【发布时间】:2014-04-04 03:44:52
【问题描述】:
我通过OutputDebugString() 输出日志/警告/错误消息,因此它们可以在 Visual Studio 的“输出”窗口中读取。
我想让这些消息成为链接。单击后,他们将打开预定义的源文件并将光标放在预定义的行上,就像编译器错误发生的那样。
我该怎么做?
【问题讨论】:
我通过OutputDebugString() 输出日志/警告/错误消息,因此它们可以在 Visual Studio 的“输出”窗口中读取。
我想让这些消息成为链接。单击后,他们将打开预定义的源文件并将光标放在预定义的行上,就像编译器错误发生的那样。
我该怎么做?
【问题讨论】:
以特殊方式格式化输出字符串:
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。完整路径始终有效。 (无关,宏非常适合添加路径和行号)
OutputDebugStringA 类似c:\projects\foo\foo\main.cpp(9): in function "main": Yay! Fancy link!。它对你有用吗?