このページを編集する際は、[[編集に関する方針]]に従ってください。
*概要 [#rb30092c]
-対象:8.1.4
-言語:C
-[[postgresql-8.1.4/src/include/postgres.h]]にて定義

-同じヘッダーファイルを持つ別々のCファイルに、同じ関数名で以下の2通りが記述されている。(別のバイナリにリンクされる?)

**baclend/port/ipc_test.c 内のコード [#p49bb238]

-エラー情報を標準エラー出力に出力した後、プログラムを停止する。
-エラー情報には、引数で指定された、次の情報が含まれる。
--conditionName(エラー状態)
--errorType(エラー値)
--fileName(ファイル名)
--lineNumber(行番号)

**backend/util/error/assert.c 内のコード [#m0b8c84e]

+エラー情報のうち*conditionName、*errorType、*fileNameのどれかのポインタが無効でないか評価
++どれかが無効であれば、「bad arguments」というメッセージを出力する。
++すべて有効であれば、エラー情報を標準エラー出力に出力する。エラー情報には、引数で指定された、次の情報が含まれる。
+++conditionName(エラー状態)
+++errorType(エラー値)
+++fileName(ファイル名)
+++lineNumber(行番号)
+SLEEP_ON_ASSERTオプションをつけてコンパイルしていた場合、約33分スリープする。
+プログラムを停止する。

*引数 [#pad3c3ac]

+conditionName : エラー状態
+errorType : エラー値
+fileName : ファイル名
+lineNumber : 行番号

*実装 [#ra626fd9]

**baclend/port/ipc_test.c 内のコード [#p49bb238]

int
ExceptionalCondition(char *conditionName,
					 char *errorType,
					 char *fileName,
					 int lineNumber)
{
	fprintf(stderr, "TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n",
			errorType, conditionName,
			fileName, lineNumber);
	abort();
	return 0;
}

**backend/util/error/assert.c 内のコード [#m0b8c84e]

int
ExceptionalCondition(char *conditionName,
					 char *errorType,
					 char *fileName,
					 int lineNumber)
{
	if (!PointerIsValid(conditionName)
		|| !PointerIsValid(fileName)
		|| !PointerIsValid(errorType))
		write_stderr("TRAP: ExceptionalCondition: bad arguments\n");
-[[PointerIsValid()/postgresql-8.1.4]]
-[[write_stderr()/postgresql-8.1.4]]

	else
	{
		write_stderr("TRAP: %s(\"%s\", File: \"%s\", Line: %d)\n",
					 errorType, conditionName,
					 fileName, lineNumber);
-[[write_stderr()/postgresql-8.1.4]]

	}
	
#ifdef SLEEP_ON_ASSERT
	
	/*
	 * It would be nice to use pg_usleep() here, but only does 2000 sec or 33
	 * minutes, which seems too short.
	 */
	sleep(1000000);
#endif
	
	abort();
	
	return 0;
}

*呼出元 [#uc62c0c9]
-[[TrapMacro()/postgresql-8.1.4]]

*備考 [#b85718ee]

-[[assert()>一般用語]]で評価式が偽になったときのエラーハンドリング

 * ExceptionalCondition - Handles the failure of an Assert()

*履歴 [#h6d0daa1]
-作者:[[testnoda:http://d.hatena.ne.jp/testnoda/about]]
-作者:[[testnoda/ページ作者]]
-日付:2006/8/9
|更新日|更新者|更新内容|
||||

*コメント [#ve0d4b36]
#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS