2011-10-08 183 views
4

如何在Visual C++的輸出窗口上打印?我正在處理的項目不是控制檯窗口項目類型。那是當我構建並運行它時,它不打開控制檯窗口。相反,它會打開一個win32應用程序,這個應用程序不是由我自己構建的。我只是增加了一些東西。在Visual C++ IDE的輸出窗口上打印輸出

我對C++來說很新穎,因爲我無法在任何控制檯上打印變量,這使我很難調試。

由於Visual Studio 2010項目在構建和運行時沒有啓動控制檯,我仍然可以在IDE的Output窗口上打印輸出,如變量和其他項目嗎?

感謝您的任何幫助。

+2

這不是一個好辦法調試你的程序。瞭解如何使用調試器。 –

+0

我在努力。但是我對C++中通過拷貝傳遞的所有引用和值感到困惑,因爲我非常習慣於像Java這樣的更高級的語言。 – Carven

回答

6

您可以使用OutputDebugString("...");打印到Visual Studio中的輸出窗口。雖然你必須要#include <windows.h>

+0

我試了一下,它的工作原理。但是,當我這樣做,它有錯誤:'OutputDebugString(「point1:」<< point1 [0] <<「,」<< point1 [1] <<「,」<< point1 [2] << endl); 「這有什麼問題? – Carven

+1

OutputDebugString只會顯示一個以null結尾的字符串。您必須在將它傳遞給函數之前手動構建它。看看[sprintf](http://msdn.microsoft.com/en-us/library/ybk95axf%28v=vs.71%29.aspx)函數。 – Darcara

0

您可以使用Windows功能OutputDebugString(請參閱here)將輸出發送到調試器。這些輸出顯示在VS輸出窗口中。您還可以使用外部應用程序觀看這些輸出,例如DebugView

記得從你的產品代碼中刪除這些言論,如果你不希望其他人看到這些調試信息(這會使用工具,如DebugView中其他可能......)

1

除了打印的輸出在其他答案中顯示的VS中,我更願意在我的GUI應用程序中創建控制檯窗口,然後使用常規printf或cout將調試信息寫入它。這有一個好處,即使在沒有調試器的情況下運行也可以實現。

請參閱this site瞭解設置控制檯的簡單功能。

3

我寫了一個可移植的TRACE宏。
在MS-Windows上,它基於OutputDebugString,正如其他答案所示。

在這裏我分享我的工作:

#ifdef ENABLE_TRACE 
# ifdef _MSC_VER 
# include <windows.h> 
# include <sstream> 
# define TRACE(x)       \ 
    do { std::stringstream s; s << (x);  \ 
      OutputDebugString(s.str().c_str()); \ 
     } while(0) 
# else 
# include <iostream> 
# define TRACE(x) std::clog << (x) 
# endif  // or std::cerr << (x) << std::flush 
#else 
# define TRACE(x) 
#endif 

例如:

#define ENABLE_TRACE //can depend on _DEBUG or NDEBUG macros 
#include "my_above_trace_header.h" 

int main (void) 
{ 
    int  v1 = 123; 
    double v2 = 456.789; 
    TRACE ("main() v1="<< v1 <<" v2="<< v2 <<'\n'); 
} 

請隨時給任何改進/建議/貢獻;-)

+1

傳遞一個std:string我得到:「const char *」類型的參數與類型「LPCWSTR」的參數不兼容? – MaurGi