2017-02-16 28 views

答えて

1

backtraceファミリーの機能があります。例はmanページを参照してください。原則

1

、シグナルハンドラは、関数の(小)セット、(Maxim's answerによって示唆されるように、GNUのlibcのからbacktraceを除く)のみいわゆる非同期シグナルセーフ機能を呼び出すことができます。 signal(7)を読んでください。

実際には、特にバックトレースを表示してから中止したい場合は、気にしないことがあります。 DWARFのデバッグ情報を解析するIan Taylorのlibbacktraceも参照してください。-gフラグをgccまたはg++に、おそらく-O2のような最適化フラグに加えてコードをコンパイルする方がよいでしょう。 GCCの中では、シグナルハンドラからの不良信号(セグメンテーションフォールト、すなわちSIGSEGVを含む)に良いバックトレースをダンプするのに事実上使用されており、ほとんどの場合かなりうまく機能します。次に、最近のバージョンのGCCを使用してください。 GCC 6

+0

gdbの内部ではなく、プログラムでスタックトレースを出力したいと考えています –

+0

しかし、私はプログラマティカル( 'gdb'は関与していません)で提案している解決策です。しかし、 '-g'を使ってコンパイルするのが良いでしょう –

関連する問題