3

私はC++を初めて使用し、最近Linuxでのg++でのコンパイルからVisualStudioに切り替えました。私はこのようなものをテストするための簡単なプログラムを書こうとしていました:

#include <iostream>

void main()
{
    // Things
}

またcout <<、Visual Studioの出力ウィンドウに印刷する方法がこのように機能しないことに気付く前に、関数が返すものを表示するために使用していました。デバッグモードを使用できることはわかっていますが、Visual Studioでウィンドウに出力を表示する方法はありますか?私が見つけた古い投稿の1つは、OutputDebugStringの使用を提案しましたが、コードをWin32アプリケーションとして記述しなかったため、この関数は単純なcppファイルには存在しないと思います。

また、プログラムの実行時に黒いウィンドウが表示され、すぐに消える理由はありますか?

4

3 に答える 3

4

勝利のためのOutputDebugString。それは存在します。windows.hを含めるだけです。それはそこにあります。

stderrとstdoutをパイプに効果的にワイヤリングし、出力をOutputDebugStringにレジンクさせる方法はいくつかありますが、簡単な方法を探しているようです。stdout(coutなど)に書き込まれたものはすべてコンソールウィンドウに移動するため、OutputDebugString nutsに移動する前に、まずコンソールウィンドウで出力を確認してください...

コンソールウィンドウといえば...

黒がポップアップしてすぐに消える理由は、コンソールウィンドウが開いたり閉じたりしているためです。また、実質的な処理が完了する前にプロセスが終了している可能性があります。IDEのmain()の最後にブレークポイントを詰め込みます。その後、Alt+Tabすることができます。

ところで:OutputDebugStringを使用する場合、送信するテキストはCRLFされないため、出力テキストに含めてください。

于 2012-10-13T05:17:27.343 に答える
2

以下は私が書いたポータブルTRACEマクロです。

OutputDebugStringWindowsでは、 WhozCraigの回答に示されているとおりに基づいています。

#ifdef ENABLE_TRACE
#  ifdef _MSC_VER
#    include <windows.h>
#    include <sstream>
#    define TRACE(x)                           \
     do {  std::stringstream s;  s << (x);     \
           OutputDebugString(s.str().c_str()); \
        } while(0)
#  else
#    include <iostream>
#    define TRACE(x)  std::clog << (x)
#  endif        // or std::cerr << (x) << std::flush
#else
#  define TRACE(x)
#endif

例:

#define ENABLE_TRACE  // Can depend on _DEBUG or NDEBUG macros
#include "my_above_trace_header.h"

int main (void)
{
   int     v1 = 123;
   double  v2 = 456.789;
   TRACE ("main() v1="<< v1 <<" v2="<< v2 <<'\n');
}
于 2013-01-30T17:17:15.717 に答える
0

単体テストケース内から出力ウィンドウに書き込みたい場合は、次を使用できます。

#include "CppUnitTest.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

TEST_METHOD(testingsomething)
{
    Logger::WriteMessage("Hello output window");
}
于 2017-06-20T21:34:49.477 に答える