Mac OSX LionでいくつかのC++プログラミングを行い、クラッシュまたは例外が発生したときにスタックトレースを出力したい。以下の説明では、MacPortのgcc47とappleのllvm-gcc42の両方を試しました。Mac OSXでキャッチされない例外のバックトレース
きれいなスタックトレースを印刷するので、glogを使用するようになりました。私は例外をスローすることにより、プログラムをクラッシュした場合、しかし、
*** Aborted at 1333289352 (unix time) try "date -d @1333289352" if you are using GNU date ***
PC: @ 0x1091a9137 C::h()
*** SIGSEGV (@0x0) received by PID 29623 (TID 0x7fff722d4960) stack trace: ***
@ 0x7fff8cabdcfa _sigtramp
@ 0x1091a9138 C::h()
@ 0x1091a9112 C::g()
@ 0x1091a90ef C::f()
@ 0x1091a903a main
Segmentation fault: 11
、プリントアウトスタックトレースは非常に有用ではありません。私はNULLポインタにアクセスすることでプログラムのクラッシュを聞かせている場合には、プリント次のスタックトレース罰金になります。
terminate called after throwing an instance of 'std::runtime_error'
what(): Haha
*** Aborted at 1333289406 (unix time) try "date -d @1333289406" if you are using GNU date ***
PC: @ 0x7fff8450f82a __kill
*** SIGABRT (@0x7fff8450f82a) received by PID 52106 (TID 0x7fff722d4960) stack trace: ***
@ 0x7fff8cabdcfa _sigtramp
Abort trap: 6
私はCentOSのシステム上samethingを試してみましたが、それがキャッチされない例外を除いて、合理的なスタックトレースを出力しますので、glogの問題になることはありません。
だから私の質問です:捕獲されない例外のスタックトレースをglogプリントアウトする方法はありますか?
これはグロッグの仕事をするための答えではありませんが、あなたが望むものを与えるかもしれないDTraceも考えてください。プログラムに何かをコンパイルしたり、デバッグのためにコンパイルする必要はありません。既存のプログラムで使用できます。いくつかの参考文献:[Oracle/Sun DTrace](http://docs.oracle.com/cd/E19253-01/817-6223/chp-actsub-ustack/index.html)および[MacTech DTrace](http:// www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html)Web上に「DTrace 1ライナー」といういくつかのページがあり、あなたが望む(ustackを使用して)ほしいと思うかもしれません。非常に便利です。 – gbulmer
完全性のために、OPはこれをgoogle-glog [here](http://code.google.com/p/google-glog/issues/detail?id=120)のバグとして提出したようです。うまくいけば、Googleの誰かが直接質問に対処します。 – MrGomez
@MrGomez、それはグーグルグログの問題に貼り付けられた私でした。 –