2016-06-27 4 views
1

私のC++プログラムにgoogle glogライブラリを使用しています。前にglogライブラリを使用していましたので、CHECKエラーが発生したときにスタックトレースを出力するはずです。しかし、それは私のプログラムのための任意のスタックトレースを出力しません。Googleのglogはスタックトレースを表示しません

#include <glog/logging.h> 

void bar(int x) { 
    CHECK_EQ(x, 1); 
} 

void foo(int x) { 
    bar(x + 1); 
} 

int main() { 
    foo(1); 
} 

のMakefileが

all: Makefile test.cpp 
    g++ -g -O3 test.cpp -lglog -o test 

であると私は取得しています出力は

$ ./test 
WARNING: Logging before InitGoogleLogging() is written to STDERR 
F0629 14:09:45.900789 37730 test.cpp:4] Check failed: x == 1 (2 vs. 1) 
*** Check failure stack trace: *** 
Aborted 

である私はここで何かが足りないのですか?

ありがとうございました!

+0

あなたはデバッグシンボルとし、最適化なしでコンパイルしましたか? –

+0

問題を再現するために、より多くの情報を提供する必要があります。あなたのコード、あなたの設定などを投稿してください。[mcve]を参照してください。 – Zulan

+1

私の質問は更新されました:) – user2100910

答えて

3

私は私が最初に私は私のスタックトレースを印刷したい場合は、glogを初期化するためにInstallFailureSignalHandler()関数を呼び出す必要があることが判明しました。

#include <glog/logging.h> 

void bar(int x) { 
    CHECK_EQ(x, 1); 
} 

void foo(int x) { 
    bar(x + 1); 
} 

int main(int argc, char** argv) { 
    google::InstallFailureSignalHandler(); 
    foo(1); 
} 

、出力は次のとおりです:だから固定プログラムがある

$ ./test 
WARNING: Logging before InitGoogleLogging() is written to STDERR 
F0708 09:15:35.401262 44752 test.cpp:4] Check failed: x == 1 (2 vs. 1) 
*** Check failure stack trace: *** 
*** Aborted at 1467990935 (unix time) try "date -d @1467990935" if you are using GNU date *** 
PC: @  0x7f3c96566f89 (unknown) 
*** SIGABRT (@0x275c0000aed0) received by PID 44752 (TID 0x7f3c9725b780) from PID 44752; stack trace: *** 
    @  0x7f3c96567000 (unknown) 
    @  0x7f3c96566f89 (unknown) 
    @  0x7f3c9656a398 (unknown) 
    @  0x7f3c96e28d81 (unknown) 
    @  0x7f3c96e28daa (unknown) 
    @  0x7f3c96e28ce4 (unknown) 
    @  0x7f3c96e286e6 (unknown) 
    @  0x7f3c96e2b687 (unknown) 
    @   0x400d80 bar() 
    @   0x400dab foo() 
    @   0x400dcb main 
    @  0x7f3c96551ec5 (unknown) 
    @   0x400c39 (unknown) 
    @    0x0 (unknown) 
Aborted 
関連する問題