我正在玩一些OpenGL,使用SDL來處理窗口/輸入等。目前,我正在顯示任何我想看到的HUD信息。那麼,這是越來越繁瑣,我想知道是否有一個簡單的方法來打開一個單獨的控制檯窗口向我報告這些信息。我仍然對C++不熟悉,所以如果這是一個明顯的例子,那就輕鬆點。C++/SDL使用控制檯窗口進行調試
回答
在項目屬性中的鏈接器 - >系統中,檢查子系統是否爲「控制檯(/ SUBSYSTEM:CONSOLE)」。這會導致在運行程序時出現單獨的控制檯窗口。如果你當前的入口點不是main
,那麼如果你這樣做,你需要改變它。
如果您從命令行運行並使用printf()
,則應該看到消息註銷到您的終端窗口。否則,您可以登錄到文件並在* nix樣式框上使用tail -f
來查看顯示的輸出。
你在使用什麼環境?大多數IDE將在其調試輸出窗口中顯示此輸出。
雖然我會怎樣創建這個控制檯窗口?目前,我正在使用由SDL生成的窗口。 – grep
你在做什麼平臺?如果是Windows,只需運行cmd.exe並從那裏運行程序,在Mac上使用終端或在您選擇的任何終端上運行Linux。 –
以下代碼適用於Windows。我總是覺得很方便的保持周圍按需創建控制檯窗口的能力:
int hConHandle;
intptr_t lStdHandle;
CONSOLE_SCREEN_BUFFER_INFO coninfo;
FILE *fp;
// allocate a console for this app
AllocConsole();
// set the screen buffer to be big enough to let us scroll text
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &coninfo);
coninfo.dwSize.Y = 500;
SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coninfo.dwSize);
// redirect unbuffered STDOUT to the console
lStdHandle = (intptr_t)GetStdHandle(STD_OUTPUT_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen(hConHandle, "w");
*stdout = *fp;
setvbuf(stdout, NULL, _IONBF, 0);
// redirect unbuffered STDIN to the console
lStdHandle = (intptr_t)GetStdHandle(STD_INPUT_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen(hConHandle, "r");
*stdin = *fp;
setvbuf(stdin, NULL, _IONBF, 0);
// redirect unbuffered STDERR to the console
lStdHandle = (intptr_t)GetStdHandle(STD_ERROR_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen(hConHandle, "w");
*stderr = *fp;
setvbuf(stderr, NULL, _IONBF, 0);
// make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog point to console as well
std::ios::sync_with_stdio();
//Keep our window in focus
SetForegroundWindow(m_hWnd); // Slightly Higher Priority
SetFocus(m_hWnd); // Sets Keyboard Focus To The Window
此代碼假定HWND
是在一個名爲m_hWnd
變量;它是從我使用的類包裝器中複製的。但是,如何從SDL獲得HWND
取決於您。
要釋放控制檯,稱之爲:
FreeConsole();
AllocConsole
和FreeConsole
是Win32 API函數。
- 1. 如何寫入控制檯窗口進行調試?
- 2. 用javaw控制檯窗口?
- 3. 創建控制檯,如進度窗口
- 4. 將調試控制檯窗口放入您的應用程序
- 5. 顯示控制檯應用程序窗口以調試DLL
- 6. 使用控制檯模式進行調試
- 7. 使用WPF窗口模擬控制檯
- 8. 使用java更新控制檯窗口
- 9. 使用ReadConsoleInput()拖動控制檯窗口
- 10. 如何使Xcode 4.4調試控制檯使用彈出窗口進行自動完成?
- 11. 如何在進行系統調用時停止顯示控制檯窗口?
- 12. 隱藏控制檯窗口執行_popen
- 13. 如何自定義Visual Studio控制檯調試窗口?
- 14. 其他控制檯窗口
- 15. .NET控制檯窗口
- 16. Unkillable控制檯窗口
- 17. 隱藏控制檯窗口
- 18. 隱藏控制檯窗口
- 19. Drag'n'drop到控制檯窗口
- 20. 檢測控制檯窗口?
- 21. 激活控制檯窗口
- 22. Visual Studio控制檯窗口
- 23. 控制檯窗口關閉
- 24. 如何在使用Visual C++ 2010進行調試時在控制檯窗口中粘貼輸入?
- 25. 控制PowerShell控制檯窗口位置
- 26. 使用browserify進行調試:調用控制檯中的函數和變量
- 27. 在沒有可見控制檯窗口的窗口中創建後臺進程
- 28. 如何使用Python控制檯在網站上執行窗口?
- 29. Javascript控制檯窗口不可用
- 30. 試圖使一個控制檯窗口不出現[C++]
這是如何適用於例如我在文本編輯器中編寫我的應用程序然後通過Cmake創建可執行文件? – Speldosa
@Speldosa:您需要找到允許您傳遞鏈接器標誌的CMake選項,然後將「/ SUBSYSTEM:CONSOLE」傳遞給鏈接器。 –
set_target_properties(youapplication性能LINK_FLAGS 「/子系統:CONSOLE」)或做:集(CMAKE_EXE_LINKER_FLAGS 「/子系統:CONSOLE」)作爲一個全球性的設置。 –