izb*_*izb 86 c++ console winapi visual-studio-2005 visual-studio
我有一个win32项目,我已经加载到Visual Studio 2005中.我希望能够将内容打印到Visual Studio输出窗口,但我不能为我的生活找出方法.我试过'printf'和'cout <<',但是我的信息一直没有打印.
是否有某种特殊的方式来打印到Visual Studio输出窗口?
Mar*_*age 129
你可以用OutputDebugString.OutputDebugString是一个宏,根据您的构建选项映射到OutputDebugStringA(char const*)或OutputDebugStringW(wchar_t const*).在后一种情况下,您必须为该函数提供宽字符串.要创建宽字符文字,您可以使用L前缀:
OutputDebugStringW(L"My output string.");
Run Code Online (Sandbox Code Playgroud)
通常你会_T像这样使用宏版本和宏:
OutputDebugString(_T("My output string."));
Run Code Online (Sandbox Code Playgroud)
如果您的项目配置为为UNICODE构建,它将扩展为:
OutputDebugStringW(L"My output string.");
Run Code Online (Sandbox Code Playgroud)
如果您不是为UNICODE构建,它将扩展为:
OutputDebugStringA("My output string.");
Run Code Online (Sandbox Code Playgroud)
Zac*_*Zac 27
如果项目是GUI项目,则不会显示任何控制台.要将项目更改为控制台,您需要转到项目属性面板并设置:
只有拥有经典的" int main() "入口点时,此解决方案才有效.
但是如果你喜欢我的情况(一个openGL项目),你不需要编辑属性,因为这样做效果更好:
AllocConsole();
freopen("CONIN$", "r",stdin);
freopen("CONOUT$", "w",stdout);
freopen("CONOUT$", "w",stderr);
Run Code Online (Sandbox Code Playgroud)
printf和cout将照常工作.
如果在创建窗口之前调用AllocConsole,控制台将出现在窗口后面,如果之后调用它,它将显示在前面.
Rin*_*ing 12
要打印到real控制台,您需要使用链接器标志使其可见/SUBSYSTEM:CONSOLE.额外的控制台窗口很烦人,但出于调试目的,它非常有价值.
OutputDebugString 在调试器内运行时打印到调试器输出.
小智 6
如果要打印十进制变量:
wchar_t text_buffer[20] = { 0 }; //temporary buffer
swprintf(text_buffer, _countof(text_buffer), L"%d", your.variable); // convert
OutputDebugString(text_buffer); // print
Run Code Online (Sandbox Code Playgroud)
考虑使用 VC++ 运行时宏来报告_RPT N () 和 _RPTF N ()
您可以使用 CRTDBG.H 中定义的 _RPTn 和 _RPTFn 宏来代替 printf 语句的使用进行调试。当 _DEBUG 未定义时,这些宏会在您的发布版本中自动消失,因此无需将它们包含在 #ifdefs 中。
例子...
if (someVar > MAX_SOMEVAR) {
_RPTF2(_CRT_WARN, "In NameOfThisFunc( ),"
" someVar= %d, otherVar= %d\n", someVar, otherVar );
}
Run Code Online (Sandbox Code Playgroud)
或者您可以直接使用 VC++ 运行时函数_CrtDbgReport、_CrtDbgReportW。
_CrtDbgReport 和 _CrtDbgReportW 可以将调试报告发送到三个不同的目标:调试报告文件、调试监视器(Visual Studio 调试器)或调试消息窗口。
_CrtDbgReport 和 _CrtDbgReportW 使用 printf 或 wprintf 函数定义的相同规则,通过将参数 [n] 参数替换到格式字符串中,为调试报告创建用户消息。然后,这些函数根据为 reportType 定义的当前报告模式和文件生成调试报告并确定一个或多个目的地。当报告发送到调试消息窗口时,文件名、行号和模块名将包含在窗口中显示的信息中。
如果您需要查看广泛使用 printf 的现有程序的输出,而无需更改代码(或仅进行最小的更改),您可以按如下方式重新定义 printf 并将其添加到公共标头 (stdafx.h)。
int print_log(const char* format, ...)
{
static char s_printf_buf[1024];
va_list args;
va_start(args, format);
_vsnprintf(s_printf_buf, sizeof(s_printf_buf), format, args);
va_end(args);
OutputDebugStringA(s_printf_buf);
return 0;
}
#define printf(format, ...) \
print_log(format, __VA_ARGS__)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
186987 次 |
| 最近记录: |