2011-06-25 32 views
3

私はepollを使ってLinuxマシン上でプログラミングしています。デバッグに問題があります。今私は場所の上にログステートメントを置いた。スタックトレース情報を取得するにはどうすればよいですか?

C++でスタックトレースなどの情報を印刷する方法があるかどうかは分かりませんでした。事前に

おかげで...

編集:私は、ファイルを作成し、私はGDBに私のサーバーを実行する場合、それはすべてのパケットを受信しませんムーに-g設定

。私は理由を知らないが、コマンドラインでこれを実行するとパケットを受信するが、これをGDBで実行するとクライアントから何も受け取らない(ログステートメントは見えない)

+1

私はデバッガを必要とすると思います。おそらくあなたがLinux上にあるGDBだと思われます。 – Tim

+0

[gdb](http://www.gnu.org/software/gdb/)でプログラムを実行してみてください。あなたが望むことを実行する 'bt'というコマンドがあります。 – beduin

+0

「吹き飛ばす」とは、sigsegvのようなクラッシュを意味する場合、デバッグ情報でプログラムをコンパイルし、コアダンプを有効にしてコアダンプでgdbを使用することができます。コアダンプは、プログラムがクラッシュした場所を教えてください。 – rve

答えて

1

gdbデバッガを使用してプログラムを実行できます。

gccを使用している場合は、-gなどのデバッグフラグを付けて再コンパイルする必要があります。

あなたのプログラムに関する詳細情報が含まれています。

+0

私のmakeファイルでは、CC:= g ++とCFLAGS:= -DDEBU1 -DCONFIG_EMBEDDED -DUSE_IND_THREAD -DFIXEDを設定しました。そして私はこれをすべて入れました:$(CCL)$(CFLAGS) - サーバ$(SOURCE)$(LIBS)だから-gの後に-oを付けますか?ありがとうございます... – user800799

+0

gdbを起動している間は、ブレークポイントのようにすることができます。ファイル名:lineno またはclass:functionname。 を使用して、ブレークポイント指定子とブレークポイント指定子を設定します。 runを使用してアプリケーションを起動すると、ブレークポイントの1つに達した時点でgdbが停止します。 ここにbtコマンドを使用してブラケットを見ることができます。 –

+0

printを使って変数を監視することもできます。詳細はgdbチュートリアルを読んでください。 –

1

プログラムがクラッシュしたときに検出できる場合は、スクリプトを書き出してGDBを起動する可能性があります。そのスクリプトはGDBにバックトレースを出力させることができます。

希望する情報の種類に基づいて、/proc/<pid>/stackをご覧ください。

0

(バックトレースは、さらにUDPプロトコルを使用して、ネットワークを介して収集することができます)私はGLIBCからバックトレースを()を使用したことだし、それは素晴らしい作品:

http://blog.aplikacja.info/2010/12/backtraces-for-c/

関連する問題