2011-01-16 7 views
0

私は現在、OS XからLinux(コンソールツール)に移植しているコードをいくつか持っています。セグメンテーションフォールト後にGDBが返されない

このコードのどこかで、セグメント違反が発生します。問題は、GDBなしでプログラムを実行すると、セグメンテーション違反がはっきりと分かり、プログラムが強制終了されるということです。しかし、私がGDBを実行しているときには、GDBは停止し、GDBはプロンプトに戻りません。だから私は実際に何が起こっているのか調べることはできません。

C++がコードです。 g ++で-gオプションを付けてコンパイルします。

Btw。 GDBには新しく、これは明らかです。

アイデア? ありがとうございます。

ワンセグ障害信号を受信したときTrenskow

+0

Ctrlキーを押しながらCキーを押して「ハングする」とはどうなりますか?それはGDBに制御を戻すはずです。 –

+0

申し訳ありませんが、これはばかげた提案のようですが、実際にgdbを終了しましたか(通常は 'quit')?セグメンテーションフォルトが実際に発生したときにスタックの状態を調べて、何が原因かを突き止めることができるように、これは停止します。 – Dawson

+0

あなたはvalgrindの下でプログラムを実行しようとするかもしれません - gdbがそれらに気づく前にエラーを拾うことがよくあります(通常よりも10倍遅いプログラムで実行します) –

答えて

0

のような行動をコア・ダンプをロードすることができますGDBにコア・ダンプをロードして

に何が起こっているかを調べることができ、そのように有効にすることを検討典型的ではないとあなたは説明します - 私はスタックがゴミ箱になっている可能性があると思います。

「kill」コマンドを使用してさまざまな信号を直接送信してみてください。

gdbでabort()を使ってテストプログラムを実行する価値があるかもしれないので、期待される動作がgdbのものであるかどうかを知ることができます。

3

は、GDBは

タイプwhereスタックトレースを参照して、そこから何が起こっているかの検査を開始するためにあなたのプログラムを一時停止します。

また、コアダンプあなたは、この

> gdb your_program the_core_dump

0

これまで私のスタックが大きすぎると見たことがあります。スタック変数をヒープ上に移動して(グローバルにする)、再コンパイルして、まだエラーが発生していないか確認してください。

関連する問題