Cambios recientes

2014-02-11

Últimos archivo liberados

This Project Has Not Released Any Files

Wiki Guide

Sidebar

Splint - 良くある質問

目次

Outline

質問と回答

Splintについての一般的な質問

1. SplintとLCLintの違いは何ですか?
2002年以前、SplintはLCLintとして知られていました。 LCLintバージョン3.0はSplintバージョン3.0と改名されました。


LCLintはもともと、LCL(the Larch C Interface Language and lint)よく知られたCプログラムのチェックツールにちなんで命名されました。我々のツールは、LCLから分岐しており、我々の焦点は、現在セキュアプログラミングにあるので、Splintと改称されました。
2. Splintのロゴは何ですか?
バージニア大学のThomas Jefferson(トーマス・ジェファーソン)のSerpentine Walls(サーペンティン・ウォール)です。壁は1レンガの厚さですが、その設計は強く、また、美しくあるためです。セキュアな(安全な)プログラムの様に、安全な壁は頑丈なレンガ、頑丈な構造、そしてエレガントかつ理にかなった設計に依存します。
3. Splintはどのように発音されますか?
"Splint"は折れた骨を固定するために使用される応急処置器具のように一つの単語のように発音することができます。 "S" "P" "Lint"として発音することも許されます(ただし、難しいが)。
4. 自分のソフトウェア配布物にSplintを含めることは可能でしょうか?
可能です。SplintのライセンスはGNU General Public Licenseです。www.splint.orgへの参照とクレジットを変更したり削除したりしない限り、あなたが望む通りに再配布してかまいません。Splintは商用のディストリビューション(配布物)に含まれていてもかまいませんし、複数のLinuxやフリーウェアのCDに含まれています。Splintを再配布したい場合は、splint@cs.virginia.eduへメッセージを送付し、お知らせください。
5. 自分の会社でSplintを使用することは可能でしょうか?(私たちは、GNUの組織ではありません)
可能です。SplintのライセンスはGPLです。誰もが使用可能です。再配布を行いたい場合は、ライセンスを確認するか、私たちに問い合わせてください。
6. どのコンパイラでSplintをサポートしているでしょうか?
Splintはコンパイラには依存していません。ISO C99の仕様に従って標準的なC言語のコードをチェックします。SplintはANSI Cの拡張であるC99の多く(全てではない)をサポートしています。Splintはgccコンパイラの拡張機能(+gnuextensionsが使用された場合)のいくつかをサポートしています。
7. SplintはC++を扱えるでしょうか?
いいえ、Splintは、C++のコードをチェックしません。私たちは、C++のフロントエンドをビルドするためのリソース(あるいは、研究の正当化)を持っておりませんが、もし、ソースコードが利用できるC++フロントエンドのビルドに興味をお持ちでしたら、私は、きっと間違いなく、喜んでお手伝いするでしょう。

インストール

8. Splint.tgzファイルをダウンロードしましたが、解凍する方法が分かりません。私のシステムのtarコマンドには"z"オプションはありません。
あなたのシステム上でGNU tarがあるかを確認し、通常、gtar あるいは gnutarコマンドを呼び出します。GNU tarは、-zオプションをサポートしています。


zipを解凍してから、tarを展開することも可能です。zipを解凍するため、gunzip filename.tar.gzを実行し、その後、tar -xvf filename.tarを実行してください。


これを1つのコマンドで、gzip -d < filename.tar.gz | tar -xvf -. [Contributed by Derric Tubbs] です。
9. WindowsでSplintを使用したいのですが、どうしたら良いでしょうか?
Windows上でのSplintの入手およびインストールを行う手順については、Windowsへのインストールを参照してください。私たちは、Windowsを積極的にサポートしたり、どんなWindowsでも開発したりすることはありません。
10. Windows 2000にSplintをインストールしました。.splintrcファイルはどこに置いたら良いでしょうか?
Win32に対しては、SplintはDOSのファイル名の制限のため、.splintrcの代わりに、splint.rcを探します。まず、今のディレクトリ(カレントディレクトリ)を探し、次にホームディレクトリを探します。
11. Splintをビルドしたところ、以下のエラーが出ました。
          Checking manual...
          cmx > / Checking tests2.2...
          Checking tests2.4...
          Checking tests2.5...
          Checking db1...
          0a1,2
          < /cmx/tools/make -e clean
          > /cmx/tools/make -e check
          *** FAIL ***
          Checking db2...
          0a1,2
          < /tools/make -e clean
          > /cmx/tools/make -e check
          *** FAIL ***
          Checking db3...

気にする必要はありますか?

それらの違いは無害に見えます。あなたのmakeが私たちのものよりも少し異なってセットアップされている可能性があります。
12. ちょうど、新しいPCにSplintをインストールしました。テストスイートが実行されているとき、ビルドしている間、エラーを得ました。結果に目を通すと、Splintは分析対象のコードのどんなエラーも報告していないように思えるます。何が起こっているでしょうか?
1つの可能性は、テストスイートを実行しているインストールディレクトリがシステムパスにあることです(そのため、Splintは-sysdirerrorsが設定されている場合、それがデフォルトであるかのように、エラーを報告しません)。これが問題であるかどうかを見るために、テストスイートに対して+sysdirerrorsをコマンドラインに追加してみてください。もしくは、システムパス上ではない、異なるディレクトリにSplintをインストールしてみてください。

使用

13. システムヘッダーで解析エラーになります。何故でしょうか?
解析エラーは、通常、非標準のキーワードまたは型名を使用するコンパイラ用に書かれたコードで発生します。(これらの名前の定義の規定については質問16を参照してください。)


解析エラーの場合、+posixlibか+unixlibフラグを使用して必要なライブラリが含まれていることを確認してください。非標準のGNUの拡張機能を使用している場合は+gnuextensionsフラグが役に立ちます。


しかし、変更の必要のあるいくつかのC言語の制限があるため、Splintはまだ、すべてのC99拡張機能をサポートしていません。
14. 全てのSplintの警告は本当のエラーなのでしょうか?
違います。Splintでチェックするプログラムの特性の多くは決定できません。これは、実際のプログラムで実行することが出来るどのような静的解析ツールであっても、 false positives(偽陽性)かfalse negatives(偽陰性)のどちらかを生成することを意味します。これはSplintが時折、間違った警告を発生させたり、本当のエラーを報告しなかったりすることを意味します。
15. Splintはconstをどのように扱うでしょうか?
Splintは(全く)constを解釈しません。変更チェックについてマニュアルを参照してください(section 7)。
16. 非標準のキーワードとデータ型を使用するコンパイラを使用して組込みシステム上のコードを開発しています。このコードに対してSplintを実行させたいのですが、非標準のキーワードにより解析エラーが発生します。どうしたら良いでしょうか?
この問題を解決するためには、多くの場合、-Dを使用すると良いです。


キーワードを無視したい場合は、nonstandardkeywordがキーワードの名前だとすると、キーワードを無視するプリプロセッサとするために-Dnonstandardkeyword=を追加すると良いです。同様にカスタム型をintとするには-Dspecialtype=intを使用すれば良いです。
17. Splintがディレクトリツリーとローカルソースのインクルードディレクトリをどう認識しているかは、どうしたら分かるでしょうか?pathを入れましたが、カレントディレクトリを越えて、見ていないようです。
コンパイラの場合と同じようにインクルードパスを設定するには、 -Iを使用すると良いです。
18. 私のコードではreallocを使用しています。どうすれば、コードをより効果的にチェックできますか?
メモリの動作は、戻り値に応じて異なるため、reallocのセマンティクスは、Splintのアノテーションで正確に説明することはできません。reallocが成功すると、渡したポインタは、もはや有効ではありません。 返されたポインタは指定したサイズで利用可能な記憶領域を指し示し、その値は、関数に渡されたポインタによって指し示されている元の記憶領域の先頭部分からコピーされたものです。 reallocがNULLポインタを返した場合、0より大きいバイトを確保することになっていたが、新しい記憶領域が確保できていません。渡された元のポインタは解放されておらず、その中身にはまだ、アクセス可能です。(0バイトを要求した場合、ANSI C'89およびそれ以降のバージョンでは、mallocやreallocはNULLを返す可能性があります。この場合、reallocは古い記憶領域を解放します。)


もし、reallocを使用するのであれば、それをラッパーして使用することをお勧めします。

警告とエラー

19. 異なる数値型を乗じたときに、何故警告が出るのですか?C言語はOKと言っています。この警告は何故でしょうか?
C言語の仕様が許可し、明らかに定義しているがSplintが警告を発生させるものはたくさんあります。それが「間違っている」という問題ではありません。プログラミングのミスを明らかにする可能性があるという問題です。
20. 私はscanfの戻り値は無視し、printfは無視しないとき、何故、Splintは文句を言うのでしょうか?
これはただの戦略的意思決定です。 --- 私たちは、厳格なプログラマでさえもprintfの戻り値をチェックしたいと思いますが、printfの戻り値を無視するよりも、よりコードの問題を明らかにするためにscanfの戻り値の無視を調べます。


厳格なチェックを行いたい場合、これらのライブラリの厳格バージョンを選択するために、+ansistrictlib+posixstrictlib+unixstrictlibフラグを使用してください。
21. #define MACROdebug(...) blahblahのようなコードに対してSplintを実行させると解析エラーになります。Splintでは可変長マクロを使用できますか?
申し訳ございません。Splintはまだ可変長マクロをサポートしていません。将来のリリースではこの問題を解決したいと考えています。

バグ

22. Splintのバグを見つけたと思います。どうしたら良いでしょうか?
既に知られているバグのリストと、バグの報告の方法についてはhttp://www.splint.org/bugs.htmlを参照してください。
23. Splintは、バグがあることを通知し、私はそれを報告する必要があります。どのような情報を送信する必要がありますか?
理想的には、問題を再現させるために必要なコードが欲しいです。バグを引き起こす小さく、わずかなコードがベストですがより大きなコードでも良いです。


問題を再現させることが出来ない場合、Splintにパッチを適用することはできそうにありません。しかし、まだバグについて聞いていただければ幸いですし、少なくとも問題についての回避作業上のアドバイスを提供することができるかもしれません。

追加情報

24. 私の質問はここで回答されていません。どうしたら、Splintに関する詳細な情報を得ることができますか?
Splintのマニュアルはマニュアルから利用可能です。


メーリングリストのアーカイブは以下にあります:



それでもあなたの質問に答えるための情報が見つからない場合は、splint-discussメーリングリストに質問を投稿してみてください( http://www.splint.org/lists.htmlを参照してください)。


また、splint@splint.orgへメールでお問い合わせすることも可能です。

このドキュメントはSplint(英)のサイトを元に作成しました