2

ソフトウェアリリース間で変更される傾向がある(C)構造体用のGDBPythonインターフェイスを使用してプリティプリンターを作成しました。フォーマットが変動しているので、私はプリンターを十分に動的にして、Python例外をスローするのではなく、常に何か便利なものを印刷しようとしました。

現在、私がサポートする必要のある2つの主要な形式がありますが、将来的にはさらにいくつかの形式になる可能性があります。異なるリリースからコアダンプを手動でロードしてテストする必要がないように、プリンターの単体テストをいくつか作成したいと思います。

デバッグセッション内からgdb.Valueをシリアル化して単体テストにロードできるのではないかと思いましたが、できませんでした(pickleはgdb.Valueでは機能しませんでした)。コアダンプは非常に大きいため、テスト用にプリティプリンターとスクリプトGDBを使用してそれらを保存することはできません。

巨大なコアダンプを保持せずに、きれいなプリンタを単体テストするにはどうすればよいですか?

4

1 に答える 1

2

巨大なコアダンプを保持せずに、きれいなプリンタを単体テストするにはどうすればよいですか?

小さなコアダンプを保持します:-)

struct Fooあなたがきれいなプリンターを持っていて、それがリリース間で変化し続けると仮定しましょう。

次のプログラムをコンパイルします。

#include <stdlib.h>
#include "foo.h"
int main()
{
   struct Foo f;
   // initialize f with some values
   abort();
}

このプログラムをコンパイルして実行し、それと結果のコアをfoo-v2andとして保存foo-v2.coreします(バージョン2を使用していると仮定しますstruct Foo)。コアはかなり小さいはずです。

foo.h次に、リビジョン管理システムからのバージョン1に対応するチェックアウトを行いstruct Fooます(リビジョン管理システムを使用していますか?)。プログラムを再構築して再実行し、およびとして保存します。foo-v1foo-v1.core

これで、リリースごとに、上記のプログラムを再構築/再実行し、GDBプリティプリンターの出力を期待される結果と比較する必要があります。それでも問題なく動作する場合は、これで完了です。そうでない場合は、struct Foo変更されている必要があり、きれいなプリンターを更新する必要があります。

新しいバイナリとコアをfoo-v3andとして保存しfoo-v3.core、きれいなプリンターを更新してから、すべてfoo-vNfoo-vN.coreペアに対してテストします(テスト自体には、GDBソースに付属のGDB単体テストフレームワークを使用します)。

于 2012-10-13T06:07:16.793 に答える