2009-10-30 3 views
7

私はcheck私のCアプリケーションのためのユニットテストフレームワークを使用しようとしています。しかし、私はので、2点のそれとデバッガ(GDB)を使用することはできません。チェックを使用してCでユニットテストをデバッグ

  • まず、いくつかの複雑なマクロ(START_TESTEND_TEST)を使用してチェックし、デバッガが間に私のコードにブレークポイントを置くためにトラブルを持っていますこれらの2つのマクロ(実際には、ソフトウェアブレークポイントを置くことができますが、gdbでは決して見られません)

  • 第2に、中断の振る舞いを再定義することによっていくつかの種類の例外を定義します。したがって、ハードウェアブレークポイントを設定しようとすると、ハードウェアブレークポイントがテストの失敗とみなされるため、テストは失敗し、終了します。

誰もが既にこの問題に遭遇し、解決策を持っていますか?

答えて

11

ルック:

チェック通常、フォークが別のアドレス空間を作成します。これにより、テストプログラム全体を停止するのではなく、シグナルや早期終了を捕捉して報告することができ、通常は非常に便利です。しかし、セグメンテーションフォールトやその他のプログラムエラーが発生した理由をデバッグしようとすると、フォークはデバッグツールを使用するのを困難にします。

0

Try TAP(Test Anything Protocol)...実装、出荷、デバッグが非常に簡単です。また、valgrindを認識することは非常に簡単で、gdbでよりよく再生されます。 no-fork mode

+0

2016-09-23現在、[http://ccan.ozlabs.org/info/tap.html](http://ccan.ozlabs.org/info/tap.html)へのTAPリンクは次のとおりです。 404.プライマリWebサイトozlabs.orgはまだ実行されていますが、TAP情報を見つけることができません。 Wikipediaには[Test Anything Protocol](https://en.wikipedia.org/wiki/Test_Anything_Protocol)のエントリがあります。 C、C++、Java、JavaScript、Python、Perlなどで実装された[Test Anything Protocol](https://testanything.org/)用のWebサイトがあります。 –

5

実際には、フォークモードも使用できます。これは、GDBは子に従うようになります

; follow-on-fork(私はいつも子供を取る親または子のいずれか) - detach-on-fork(これをfalseに設定)
-

gdbがフォーク行動に関連する2つの興味深いオプションがありますプロセス。 子プロセスが終了したら、inferiorコマンドを使用して、親プロセスに手動で戻す必要があります。

関連する問題