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を使用して、VisualStudioの出力ウィンドウに情報を送信できます。例えば、

#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てブレークポイントを設定します。左側に大きな赤い点が表示されます。これにより、プログラムがメインから戻る前にコンソール出力を確認できます。コンソール出力の読み取りが終了したら、を押し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()それ以外の場合はコンソールに移動します(コンソールが必要な場合は設定を参照してください。ただし、 Enterキーを押すまで一時停止するなどの使用を防ぐために、プログラムが終了するとすぐに閉じることを知っておいてください)。

私の見解では、Linuxに切り替えてください...

于 2012-12-15T02:15:16.537 に答える