サイトアイコン GAMEWORKS LAB

アサーションチェック

アサーションチェック

プログラムを作っていると、この条件に入ってきたらおかしいというパターンがあります。

例えば配列外参照してしまう引数の数値やswitch-caseに想定していない値が指定されたりです。

もし何らかの不具合でその条件に入ってしまった時にそのまま動作してしまうと何が起こるか分かりません。
そんな時に強制的にプログラムでエラーが出るようにしておくと、デバッグのコストが安く済む可能性があります。

そういったチェックをすることをアサーションチェックと言います。

アサーションチェックの実装

大体のプラットフォームではエラーの表示をする処理としてassert関数が用意されています。
このassert関数を呼び出すことで問題のあるコードかをチェックすることができます。

enum EState
{
	EStateInit = 0,
	EStateUpdate,
	EStateDelete,
	EStateMax,
};

EState GetState(int state)
{
	const EState StateList[EStateMax] = { EStateInit, EStateUpdate, EStateDelete };
	// アサーションチェック
	assert(0 <= state && state < EStateMax);
	return StateList[state];
}


例えば入ってくる値に応じて配列内の値を返す関数があった場合に、配列外参照してしまう可能性を考慮するとこうなります。
配列内の値の時だけtrueを返す条件をassertの引数に渡しています。

assertはfalseになる条件が来ると警告ダイアログを表示してプログラムを強制的に中断してくれます。

アサートで止まったソースファイルと行数。
そしてassertの条件を表示してくれます。

Visual Studioで実行していなくても表示してくれるので、プランナーやデザイナーがプレイしているときに落ちても問題があった場所をある程度特定できます。

この時に[中止]を押すとプログラムを終了します。
[再試行]を押すと、ブレークポイントで止まった状況になります。
[無視]を押すとそのままプログラムを再開します。

これを仕込んでおくだけでバグチェックの助けになるので、必要になると思った場所では積極的に仕込んでいきましょう。

これもrelease版では無効か出来るようにしておけば便利でいいですよ!

モバイルバージョンを終了