2009-03-04 4 views
2

Eclipseでデバッグするのが初めてです。Eclipse C++のデバッグがSTLで中断する

私はそれがsegfaultsを知るために私のアプリをデバッグしようとします。

問題は、EclipseがSTL内で壊れてしまうことです。これは非常に面倒です。

例:ソースファイルの134行目にブレークポイントを作成しました。これは正常に動作します。 「ステップオーバー」でF6キーを押した場合、Eclipse/gdbはstdで次の行に使用されるbasic_stringコンストラクタでブレークします:: cout。

これに関するヒントはありますか? Eclipseなどの設定オプションはありますか?

答えて

1

おそらく、それはsegfaultsですか?

+0

いいえ、それは無限ループによって引き起こされるスタックオーバーフローの原因です - 私はただ原因行を探しています^^ あなたの質問に答えてください:私のアプリにSIGINTを送ることでループが始まりますが、スタートアップ - 私はstd :: coutを使用するたびに見える –

0

Eclipseは使用していませんが、STLコードで終了したコールチェーンを表示するために使用できる「スタックバックトレース」ビューまたは「コールスタック」ビューがあります。

+0

はいそのようなビューがあります –

+0

それはあなたの問題を解決します。右? – flodin

0

コードが最適化されていると、stlで壊れている可能性があります。デバッグモードを使用してコンパイルしてみてください。

+0

もう一つのことは、そこにsigfaultingかもしれないということです。 stlのfunctonsを呼び出すコードを見てみてください。スタックトレースが役立つはずです。 –

0

は、限られた情報を考えると、これは(F6)をステップオーバー(F5)の代わりに、 に

  1. ステップは、これが起こっている場所を 見つけるために、頭に浮かぶものです。
  2. が機能しない場合は、CDTを最新の バージョンにアップグレードしてもう一度お試しください。
  3. これでも機能しない場合は、gdb をEclipseなしで使用してみてください。
  4. 最後のオプション、 は、一連の出力をスローします。 cerr(バッファされていない)は coutではありません。

この記事のいずれでもない場合は、詳細を投稿してください。

0

同様の問題がありました。それはインライン関数(stlのcuases)についてです。

追加のデバッグ情報を生成するには、コンパイラフラグを追加する必要があります。 gcc see gdbを使用している場合(gdbデバッガに準拠するために-ggdbを指定すると、そのタイプのデバッガに対して最も適切なサポートが提供されます)。

また、最適化を無効にすることもできます。

p.s.私は十分にはっきりしていませんでした。Eclipseの欠陥ではなく、コンパイラ/デバッガの欠陥です。

関連する問題