c++ - OutputDebugString 导致不一致的错误

标签 c++ visual-studio-2010

我有一个问题,由于神秘的原因出现又消失。不久前,当我开始这个项目时,我发现了一个相当方便的函数,它允许在 VS2010 中输出调试窗口。有一段时间效果很好。

现在它显示错误不一致。这意味着有时代码会编译,有时不会,我无法找出下面代码导致错误的原因。看起来几乎是随机的。按编译,错误,不更改任何内容,再次按编译,有时出错,有时正常。

这是错误的样子:

http://clip2net.com/clip/m0/1332710747-clip-29kb.png

没有:

http://clip2net.com/clip/m0/1332737362-clip-40kb.png

罪魁祸首是 OutputDebugString(buf); 注释掉该行不会发生错误。

我正在寻找解决这个问题的方法,我只需要一种将文本输出到调试窗口(输出)的方法,并且正在寻找一个简单、稳定的解决方案。或者也许有一种方法可以使此功能起作用。我有点卡住了。

如果您能分享您是如何做到的,我将不胜感激。

代码是:

#pragma once
#ifndef _XDEBUG_H_
#define _XDEBUG_H_

#include <stdio.h>
#include <stdarg.h>
#include <ctype.h>


class XDebug
{
public:

    static void __cdecl odprintf(const wchar_t *format, ...){
    wchar_t    buf[4096], *p = buf;
    va_list args;
    int     n;

            va_start(args, format);
            n = _vsnwprintf(p, sizeof buf - 3, format, args); // buf-3 is room for CR/LF/NUL
            va_end(args);

            p += (n < 0) ? sizeof buf - 3 : n;

            while ( p > buf  &&  isspace(p[-1]) )
                    *--p = '\0';

            *p++ = '\r';
            *p++ = '\n';
            *p   = '\0';

            OutputDebugString(buf);
    }

};

#endif

最佳答案

OutputDebugStringWindows.h 中定义。您需要包含该 header 才能使用该功能。

关于c++ - OutputDebugString 导致不一致的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9866764/

相关文章:

visual-studio-2010 - 如何将宏添加到 Visual Studio 项目?

visual-studio - Visual Studio 2010 中的浏览器窗口?

vb.net - VB.NET-从字符串中删除字符

c++ - 创建动态二维数组的其他方法?

c++ - 将 1d 纹理传递到片段着色器 - 全为零?

c++ - auto&& 从 C++ lambda 返回类型

c++ - 没有 if-else 语句的递归二分查找 C++

c++ - Visual Studio 2010 - 在不同的构建配置之间保留项目属性?

c++ - 如何在 Visual Studio 2010 中添加 Poco 库?

c++ - 如何抛出 EXCEPTION_FLT_UNDERFLOW?