2012-02-23 14 views
8

私は組み込みシステム上にかなり古いCコードの大きなコードベースを持っていますが、残念ながら自動テストケース/スイートはありません。これにより、コードの再構築とリファクタリングが危険な作業になります。C関数呼び出しとパラメータトレース - テストケースとモック生成

テストケースを手動で書くのは非常に時間がかかるため、たとえば、すべての関数呼び出しをトレースして入力値と出力値を記録するなど、このプロセスの少なくとも一部を自動化できるはずです。私はテストケースでこれらの値を使用することができます(これは少なくとも一部の機能では機能しません)。収集されたデータに基づいて模擬機能を作成することも可能でしょう。

このようなテストケースを持つと、リファクタリングがあまり危険でない動作になります。

既にこれを行うことができるソリューションはありますか?自分でコードを作成しなければならない場合、これを動作させる最も簡単な方法は何ですか?

ctagsを使用して関数定義を見つけ、パラメータ値を記録する関数にラップすることを考えました。別の可能性はおそらくgccコンパイラプラグインでしょう。

+0

この質問は、superuser.comに属していないと思いますか? –

+2

@ Mr.32:これはプログラミングに関連する質問ですので、ここには必ず含まれています。 –

答えて

1

gccオプション "-finstrument-functions"があります。このメカニズムを使用して、各機能の入力/終了のための独自のコールバックを定義できます。

Googleそれは多くの良い例を見つけることができます。

[編集]このgccオプションのコールバックでは、関数の入力/終了のみを追跡でき、パラメータは追跡できません。いくつかのトリックであなたはまた、パラメータを追跡するかもしれません。 (スタック上のパラメータを取得するために、現在のフレームポインタを通る)。ここで

は、実装のアイデアについての記事の話です:

http://linuxgazette.net/151/melinte.html

さらに、あなたはstraceの道のようなのparamsを(表示するためにltraceのような何かを試すことができますLinux上で、自分の組み込みシステムに依存します)。 ftrace/ust/ltrace/utrace/strace/systemtap /のユーザスペースまたはカーネルスペースのいずれかで機能トレースが機能するツールはたくさんあります。とにかく、ハードデバッグコードを追加しないと、正しい方法でパラメータを表示することはできません。エントリ/デバッグ情報を追加する作業を受け入れると、はるかに簡単です。

また、この問題に関する同様のスレッドの話もあります。

Tool to trace local function calls in Linux

+0

これは非常に興味深いですが、残念ながら元の関数のパラメータと戻り値をどのようにアクセスして格納できるのか分かりません。これはこのコンパイラ拡張でも可能ですか? – trenki

+0

ありがとうございます。私はこれをMIPSプロセッサで動作させることができるかどうかを確認する必要があります。 – trenki

関連する問題