C ++ / SDL使用控制台窗口进行调试

时间:2011-12-12 23:20:58

标签: c++ console sdl

我正在使用一些OpenGL,使用SDL来处理窗口/输入等。目前我正在显示我想要查看的任何信息到HUD。好吧,这变得过于繁琐,我想知道是否有一种简单的方法可以打开一个单独的控制台窗口来向我报告这些信息。我还是C ++的新手,所以如果这是一个显而易见的话,请对我轻松。

3 个答案:

答案 0 :(得分:6)

以下代码适用于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();

AllocConsoleFreeConsole是Win32 API函数。

答案 1 :(得分:4)

在链接器中 - >系统在项目的属性中,检查SubSystem是否为“Console(/ SUBSYSTEM:CONSOLE)”。这会导致在运行程序时启动单独的控制台窗口。如果您当前的入口点不是main,那么如果您这样做,则需要将其更改为。

答案 2 :(得分:0)

如果您从命令行运行并使用printf(),您应该会看到消息已记录到终端窗口。否则,您可以登录到文件并在* nix样式框上使用tail -f来查看显示的输出。

您使用的是什么环境?大多数IDE也会在其调试输出窗口中显示此输出。