私はC++コンソールアプリケーションを作成し、Visual Studio 2005 IDEの出力ウィンドウにcout/cerrステートメントをキャプチャしたいだけです。私はこれが単なる設定であると確信しています。誰かが私を正しい方向に向けることができますか?Visual Studio 2005の出力ウィンドウでcoutをキャプチャしますか?
答えて
これはできません。
デバッガの出力ウィンドウに出力する場合は、OutputDebugStringを呼び出します。
私は、1つの出力が複数のストリームに行くことを可能にする 'teestream'のthis implementationを見つけました。 OutputDebugStringにデータを送信するストリームを実装できます。
これは、出力画面がちょうど点滅して消えてしまうケースですか?もしそうなら、あなたは戻り前に最後のステートメントとしてcinを使って開いておくことができます。
cinを単独で評価することは効果がないため、できません。 – ben
あなたは、たとえば、次のようにCOUTの出力をキャプチャすることができます:Visual Studio 2005の出力ウィンドウにそれをMagicking
std::streambuf* old_rdbuf = std::cout.rdbuf();
std::stringbuf new_rdbuf;
// replace default output buffer with string buffer
std::cout.rdbuf(&new_rdbuf);
// write to new buffer, make sure to flush at the end
std::cout << "hello, world" << std::endl;
std::string s(new_rdbuf.str());
// restore the default buffer before destroying the new one
std::cout.rdbuf(old_rdbuf);
// show that the data actually went somewhere
std::cout << s.size() << ": " << s;
は、Visual Studio 2005のプラグイン開発者への課題として残されています。しかし、ファイルやカスタムウインドウのように別の場所にリダイレクトすることもできます。おそらく、カスタムstreambufクラスを作成することもできます(boost.iostreamも参照してください)。
プラグインは必要ありません。Mike Dimmickの言葉通りOutputDebugStringを使用してください。 – jwfearn
ベンの回答とMike Dimmickの組み合わせ:OutputDebugStringの呼び出しを終えるstream_buf_を実装しています。多分誰かがこれをやったのだろうか? 2つのBoostロギングライブラリを見てみましょう。
これは次のようになります:http://www.codeproject.com/KB/debug/debugout.aspx – wimh
また、あなたの意図、そして何を使用しているライブラリに応じて、あなたが使用することをお勧めしますTRACE macro(MFC)またはATLTRACE(ATL)。
私は最終的にこれを実装しましたので、私はあなたとそれを共有したい:あなたが書いた場合:
X:\full\file\name.txt(10) : message
出力ウィンドウと、その後、二重に
#include <vector>
#include <iostream>
#include <windows.h>
#include <boost/iostreams/stream.hpp>
#include <boost/iostreams/tee.hpp>
using namespace std;
namespace io = boost::iostreams;
struct DebugSink
{
typedef char char_type;
typedef io::sink_tag category;
std::vector<char> _vec;
std::streamsize write(const char *s, std::streamsize n)
{
_vec.assign(s, s+n);
_vec.push_back(0); // we must null-terminate for WINAPI
OutputDebugStringA(&_vec[0]);
return n;
}
};
int main()
{
typedef io::tee_device<DebugSink, std::streambuf> TeeDevice;
TeeDevice device(DebugSink(), *cout.rdbuf());
io::stream_buffer<TeeDevice> buf(device);
cout.rdbuf(&buf);
cout << "hello world!\n";
cout.flush(); // you may need to flush in some circumstances
}
ボーナスTIPそれをクリックすると、Visual Studioは10行目のファイルにジャンプし、ステータスバーに「メッセージ」を表示します。 非常にです。
これは私のためにはうまくいきましたが、VS2013とBoost 1.57ではBoostコードのアサーションエラーでクラッシュします。すぐにストリームがフラッシュされると、たくさんの印刷や 'std :: endl'をストリームに送ることで、もう使えなくなってしまいます:-(ブーストのバグかどうかは分かりません。 – Malvineous
- 1. デザイン時にVisual Studio 2005ウィンドウを表示
- 2. Visual Studio 2010の複数の出力ウィンドウ
- 3. Visual Studio 2005でlighttpdをコンパイルします
- 4. Visual Studio 2005コード定義ウィンドウが停止しました
- 5. Visual Studio 2005のLNK 2005エラー
- 6. Visual Studio 2005:ビルドソリューション
- 7. Visual Studio 2005プロジェクトオプション
- 8. Visual Studio 2005ソフトウェア
- 9. Visual Studio 2005 Annoyances
- 10. MS Visual Studio 2005 - DOSウィンドウの塗りつぶしの画面
- 11. Visual Studio 2005のシンボル
- 12. Visual Studio Isolated Shellで出力ウィンドウが機能しない
- 13. デバッグ出力ウィンドウでノイズメッセージを無効にする - Visual Studio 2012
- 14. std :: cout with Visual Studio 2015
- 15. rdlを開く方法Visual Studio 2005、Visual Studio 2008で作成しましたか?
- 16. のVisual Studio - 出力
- 17. Visual Studio 2008の出力ウィンドウをフィルタリングする方法
- 18. Visual Studio 2005レポートデザイナーの外観をVisual Studio 2005レポートデザイナーのようにすることはできますか
- 19. BDD with Visual Studio 2005
- 20. Visual Studio 2005/2008アドイン
- 21. MSBuild with Visual studio 2005
- 22. Visual StudioからSQL Server 2005でストアドプロシージャをデバッグしますか?
- 23. DBNull型に入力できません--- Visual studio 2005
- 24. Visual Studioの出力ウィンドウは、デバッグ設定のコンパイル時に警告します
- 25. Visual Studioコードのタスクの正規表現がビルドエラーの出力をキャプチャしない
- 26. Visual Studio 2005のLINQ to SQL
- 27. ウィンドウアプリケーションのWebservice Visual Studio 2005
- 28. Visual Studio 2005リンカの問題
- 29. Visual Studio 2005の製品コード?
- 30. Visual Studio 2005の問題
-1、間違っています。ベンの答えを見てください。 – MSalters