ランタイムエラー検出
ランタイムエラー検出は、静的コード解析では検出や予測が難しく、実行時にのみ現れる欠陥(スレッドの競合、誤ったファイルの上書きなど)を特定し、アプリケーションのクラッシュ、実行速度の低下、または予期しない動作の根本原因に焦点を当てることができる。ランタイムエラー検出によって一般的に検出される欠陥は次の通りである。
競合状態
データ競合
デッドロック
例外
リソースリーク
メモリリーク
セキュリティ攻撃に対する脆弱性(SQLインジェクションなど)
ヌルポインタのデリファレンス
初期化されていないメモリ
バッファオーバーラン
スタックオーバーフロー
ランタイムエラー検出ツールは、アプリケーションの実行された制御フローのエラーのみを検出できる。
C言語やC++のようなプログラミング言語では、コードの安全性管理に関してはプログラマに委ねられており、言語仕様レベルで実行時エラーに対する防御策が施されていないため、このような実行時エラー検出ツールの活用が重要になってくる。一方、JavaやC#などの後発言語では、配列の範囲外アクセスやヌル参照アクセスのような一部の実行時エラーは、実行時に仮想マシンのフレームワーク側が検出して例外を送出するため、アプリケーションコード側でのハンドリングが可能である。ただし、スレッド競合など、後発言語であっても動的分析ツールを使わなければ検出が難しい実行時エラーもある。
デバッグビルド用のランタイムライブラリやデバッガが実行時エラー検出機能を備えていることもある。