2011-11-08 30 views
0

私はTDDを学び、eclipseでCppUTestを使用しています。 不具合のセグメント化エラーを取得するコードをデバッグする方法はありますか。CPPUTestデバッグ - C++

おかげ

答えて

2

は、私はあなたを助けるためにCppUTestまたはEclipseで特別な何も知りませんが、いくつかの一般的なセグメンテーション違反のデバッグのアイデアは、ここでは、適切なようだ:

  • は、例えばprintfの(紅潮 print文を追加します。 (...)+ fflush(stdout)またはfprintf(stderr、...))をコードに追加し、何が印刷されるかを確認します。 が正確ににクラッシュするまで、一度に数枚の印刷でバイナリ検索で行います。これは昔のように聞こえるが、非常に効果的である。ここで私はこの有名なテクニックについて語っているグーグルグーグルを見つけたガイドです:http://www.floccinaucinihilipilification.net/blog/2011/3/24/debugging-via-binary-search.html

  • デバッグシンボルでコードをコンパイルし、デバッガで実行します。あなたがセグメンテーションを打つと、バックトレースを求めて、何が起こったのか把握できるかどうかを確認します。これを行うときには、特にgraphical debuggerを使用すると便利です。

  • debug malloc libraryなどのデバッグツールやvalgrindスイートのコードを実行します。これは、segfaultsの根本原因であるが、segfaultが生成される正確な場所で発生していない問題を捕捉する可能性があります(例えば、二重解放、後で使用されるバインドされた配列アクセスのclobberingポインタの外れなど)。

+0

ありがとうございました。私はgdbでいくつかのデバッグを行いましたが、デバッグ環境の設定に慣れていません。 2番目と3番目のポイントは、セットアップに役立つ参照やリンクです。 – Saaras

+0

私はあなたを助けるかもしれないいくつかのリンクを追加しました。 (私は大量のEclipseユーザーではないので、Eclipse固有のものはありませんが、これらの一般的なテクニックはどこでも動作します)。 – wjl

0

あなたの質問にいくつかのコードを追加して、あなたが何を相手にしているかをわかりやすく伝えることができれば助かります。詳細を知らされていない場合、私は次のように提案します:

  1. -vを[デバッグ]ダイアログの実行可能な引数に追加します。テストケースが実行されるときに、テストケースの名前が表示されます。印刷される最後の名前は、セグメンテーションフォルトが発生したテストです。
  2. テストケースにコードを呼び出す、そのテストケースにブレークポイントを設定します。
  3. segfaultが発生するまでコードにステップインします。
  4. segfaultの原因となった値(たいていの場合、ぶら下がりポインタ)をトレースして、それがなぜNULLか初期化されなかったのかを調べます。
関連する問題