複数のステータス ログなどを保存する簡単な方法として、std::stringstream
. エラーが発生した場合は、ファイルにダンプするだけで.rdbuf()
、プログラムがクラッシュする前に実行していたことを再現できます。
私の問題は、この文字列ストリームのサイズが無限に大きくなることです。ストリームの最後の 1MiB 程度のみを保持するようにいくつかのことを試みましたが、成功しませんでした。
.rdbuf()->pubseekoff(...)
.ignore(...)
getline(...)
ss.str() = ss.str().substr(...)
どうやら、データの一部が既に読み取られているかどうかに関係なく、基礎となるバッファーオブジェクトは常にサイズが増加するだけです。
サイズを縮小する/一定に保つ方法はありますか (できれば通常のディープコピーなし)? 基礎となるバッファオブジェクトとしての循環バッファは完璧でしょう - それは可能ですか? 特に。それはすでに存在しますか?
編集:ソリューションは基本的にストリームのように動作する必要があります。これは、std::err または直接のファイル ストリーム (boost::log と同様) の代わりに、プロコンパイラによって配置されます。したがって、厳密に必要というわけではありませんが、stringstream を使用すると非常に便利です。(そうしないと、std::endl をストリーミングできるようにすべての ostream を実装する必要があります...)