2012-03-26 42 views
0

我有一個問題,出於神祕的原因出現和消失。在我開始項目的時候,我發現了一個相當方便的函數,它允許在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 

回答

2

它看起來像你沒有這樣做:

#include <windows.h> 

OutputDebugString功能是Windows API的一部分。

3

OutputDebugStringWINDOWS.H定義。您需要包含該標題才能使用該功能。

+0

解決了它,謝謝。仍然不明白爲什麼它會偶爾編譯。 欣賞它! – 2012-03-26 05:01:26