私はTDDを学び、EclipseでCppUTestを使用しています。しつこいセグメンテーション違反が発生するコードをデバッグする方法はありますか?
ありがとう
CppUTestまたはEclipseで役立つ特別なことは何も知りませんが、ここではいくつかの一般的なsegfaultデバッグのアイデアが適切であるように思われます。
フラッシュ印刷ステートメント(例:printf(...)+ fflush(stdout)またはfprintf(stderr、...))をコードに追加して、何が印刷されるかを確認します。クラッシュしている場所を正確に絞り込むまで、一度に数枚のプリントを使用して、バイナリ検索方式でこれを実行します。これは昔ながらのように聞こえますが、非常に効果的です。これは、このよく知られた手法について説明しているグーグルを見つけたガイドです。http ://www.floccinaucinihilipilification.net/blog/2011/3/24/debugging-via-binary-search.html
デバッグシンボルを使用してコードをコンパイルし、デバッガーで実行します。セグメンテーション違反に遭遇したら、バックトレースを要求し、何が起こったのかを理解できるかどうかを確認します。これを行うときは、グラフィカルデバッガーを使用すると特に便利です。
デバッグmallocライブラリやvalgrindスイートの何かなどのデバッグツールを使用してコードを実行します。これにより、セグメンテーションフォールトの根本的な原因であるが、セグメンテーションフォールトが生成された正確な場所では発生していない問題が検出される場合があります(たとえば、ダブルフリー、後で使用される範囲外の配列アクセスクロバリングポインターなど)。
質問にコードを追加して、何に反対しているのかをよりよく理解できると便利です。詳細がわからない場合は、次のことをお勧めします。
-v
デバッグダイアログで実行可能ファイルの引数に追加します。これにより、実行時にテストケースの名前が出力されます。印刷される最後の名前は、セグメンテーション違反が発生するテストである可能性があります。