1

我是一个 Java 人(我知道相当多的 C 语言),他正试图以自己的方式进入 C++。

目前我正在使用 VisualStudio 2012 Express 并创建了一个空项目。与以下...

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    return 0;
}

真的不能再轻松了。然而,我无法让该死的输出出现在我的生活中。

'Spark.exe' (Win32): Loaded 'C:\Users\Smith_000\Documents\Visual Studio 2012\Projects\Spark\Debug\Spark.exe'. Symbols loaded.
'Spark.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ntdll.dll'. Cannot find or open the PDB file.
'Spark.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel32.dll'. Cannot find or open the PDB file.
'Spark.exe' (Win32): Loaded 'C:\Windows\SysWOW64\KernelBase.dll'. Cannot find or open the PDB file.
'Spark.exe' (Win32): Loaded 'C:\Windows\SysWOW64\apphelp.dll'. Cannot find or open the PDB file.
SHIMVIEW: ShimInfo(Complete)
'Spark.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp110d.dll'. Symbols loaded.
'Spark.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcr110d.dll'. Symbols loaded.
The program '[6260] Spark.exe' has exited with code 0 (0x0).

在阅读完此内容后,似乎创建一个空项目会禁用我在大学所做的简单 C 项目中曾经使用过的控制台。

那么,当调试模式处于活动状态时,将诸如 printf、cout 和 cerr 之类的基本调试文本放入 VS(首选)或控制台有哪些非常简单的方法?

谢谢!

4

4 回答 4

3

路由cout/cerr/clog通过使用的自定义缓冲区OutputDebugStringA

#include <iostream>
#include <windows.h>

using namespace std;

// routes cout/cerr/clog to VC++ console and good old c stdout
class custom_outputbuffer : public std::streambuf {
public:
    custom_outputbuffer() 
    {
        setp(0, 0);

        // set std::cout to use my custom streambuf
        std::streambuf *backupOut = std::cout.rdbuf(this);
        std::streambuf *backupErr = std::cerr.rdbuf(this);
        std::streambuf *backupLog = std::clog.rdbuf(this);
    }

    ~custom_outputbuffer()
    {
        // make sure to restore the original so we don't get a crash on close!
        std::cout.rdbuf(backupOut);
        std::cerr.rdbuf(backupErr);
        std::clog.rdbuf(backupLog);
    }

    virtual int_type overflow(int_type c = traits_type::eof())
    {
        currentLine.push_back(c);
        int value = fputc(c, stdout);

        if (value == EOF || value == '\n')
        {
            OutputDebugStringA(currentLine.c_str());
            currentLine.clear();
        }

        return c;
    }

    std::string currentLine;
    std::streambuf *backupOut;
    std::streambuf *backupErr;
    std::streambuf *backupLog;
};


int main(int argc, char * argv[])
{   
    custom_outputbuffer ob;

    cout << "Hello Visual Studio Debug Output" << endl;

    return 0;
}
于 2014-05-01T23:51:06.170 回答
2

这将打开一个带有文本的控制台窗口并迅速将其关闭。您可以使用OutputDebugString将信息发送到 Visual Studio 中的“输出”窗口。例如,

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    OutputDebugString("Hello World\n");
    return 0;
}
于 2012-12-15T02:27:37.230 回答
1

致命的简单方法:

将光标放在行上:

return 0;

F9设置断点。您应该会在左侧看到一个大红点。这将允许您在程序从 main 返回之前查看控制台输出。读完控制台输出后,按F5继续执行。

于 2012-12-15T02:21:33.840 回答
0

要查看 Windows IDE 输出中的文本,请使用OutputDebugString().

请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/aa363362%28v=vs.85%29.aspx

否则它会进入控制台(如果你想要一个控制台,请查看你的设置,但知道它会在你的程序退出后立即关闭,以防止这种使用,比如getchar()暂停,直到你按下回车键。)

更好的是,在我看来,切换到 Linux ......

于 2012-12-15T02:15:16.537 回答