2011-07-04 5 views
4

私は、コード内の潜在的な問題を検出し、私のプログラムがクラッシュした場所を検出するのに役立ついくつかのログを使用することに興味があります。私の問題は、私が使ったlib(google glog)は、プログラムがクラッシュする直前に起こったものをログに記録しないということです。だから私はこのような何かをしようとした(これは3つの引数のテンプレートです):プログラムのクラッシュまでグロッグですべてを記録する「組み込みの方法」はありますか?

mutex logMtx; 
template<class T, class U, class V> 
void mutexLOG_INFO(T t, U u, V v) 
{ 
    stringstream ss; 
    ss<<t; 
    ss<<u; 
    ss<<v; 
    LOG(INFO)<<ss.str(); 
    mutex::scoped_lock sl(logMtx); 
    google::FlushLogFiles(0); 
} 

それは(私のテストから)私の知る限りでは動作しますが、あなたが見ることができるように私は私を行う必要があるので、それは、とても素敵ではありませんすべてのレベル(INFO、WARNING ..)とあらゆる数のパラメータに対して独自の機能を提供します。また、私は車輪の再発明が嫌いです。

LOGの後に毎回glogをフラッシュする方法はありますか?

P.S.私はこれがg-dbではなくg-dbであることを知っていますが、私はSTLデータをうまく印刷するオプションを持っています。

EDIT:SOそれは情報の偉大な源であることを再び証明している:

#include <glog/logging.h> 
#include <**gflags**/gflags.h> 
... 
FLAGS_logbuflevel=-1; 
+0

タグのタイトルを停止してください。 –

+0

GDBを使用し、クラッシュ時にスタックトレースを取得してこれを見つけることをお勧めします。ログからのデバッグは、printfやcoutsからのデバッグに似ています。原始的で時間がかかり、適切な領域を探していないため、潜在的な観測を隠すことがよくあります。 –

+0

@San Jacinto - GDBのSTLコンテナは読めません。 – NoSenseEtAl

答えて

2

私はglogでのgflagsを使用して、--help実行する場合、オプションlogbuflevelは、あなたが探しているものかもしれません。

-logbuflevel (Buffer log messages logged at this level or lower (-1 means 
    don't buffer; 0 means buffer INFO only; ...)) type: int32 default: 0 
+0

cool、tnx ill質問を更新 – NoSenseEtAl

関連する問題