我有一個問題,出於神祕的原因出現和消失。在我開始項目的時候,我發現了一個相當方便的函數,它允許在VS2010中調試窗口輸出。它工作了一段時間。OutputDebugString導致不一致的錯誤
現在它顯示錯誤不一致。這意味着有時代碼會被編譯,有時代碼不會,並且我無法找出爲什麼下面的代碼導致錯誤。看起來幾乎是隨機的。按編譯,錯誤,再次按編譯而不改變任何東西有時錯誤有時罰款。
這是它看起來像錯誤:
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
解決了它,謝謝。仍然不明白爲什麼它會偶爾編譯。 欣賞它! – 2012-03-26 05:01:26