我正在玩一些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”)作为一个全球性的设置。 –