コンテンツにスキップ

デバッグ

デバッグとロギング

wolfSSLは、デバッグが制限されている環境でのログメッセージによるデバッグをサポートしています。 ロギングをオンにするには関数wolfSSL_Debugging_ON()を使用し、 オフにするにはwolfSSL_Debugging_OFF()を使用します。 通常のビルド(リリースモード)では、これらの関数は効果がありません。 デバッグビルドでは、これらの関数が確実にオンになるようにDEBUG_WOLFSSLを定義してください。

wolfSSL 2.0以降では、ロギングの方法についてより柔軟性を提供するために、ランタイムでロギングコールバック関数を登録できます。 ロギングコールバックは関数wolfSSL_SetLoggingCb()で登録できます。

int wolfSSL_SetLoggingCb(wolfSSL_Logging_cb log_function);

typedef void (*wolfSSL_Logging_cb)(const int logLevel,
                  const char *const logMessage);

ログレベルはwolfssl/wolfcrypt/logging.hにあり、実装はlogging.cにあります。 デフォルトでは、wolfSSLはfprintfを使用してstderrにログを出力します。

エラーコード

デバッグを支援するために、有益なエラーメッセージを提供するよう努めています。

wolfSSL_read()wolfSSL_write()の呼び出しは、成功時にはバイト数、接続終了時には0、エラー時には-1を返します。 これはread()write()と同様です。 エラーが発生した場合には、以下の2つのAPIを使用してより詳しい情報を入手できます。

関数wolfSSL_get_error()は、現在のエラーコードを返します。 現在のWOLFSSLオブジェクトとwolfSSL_read()またはwolfSSL_write()の結果値を引数として取り、対応するエラーコードを返します。

int err = wolfSSL_get_error(ssl, result);

人間が読みやすいエラーコードの説明を得るには、wolfSSL_ERR_error_string()を使用します。 この関数はwolfSSL_get_errorの戻り値と出力保存用のバッファを引数として取り、対応するエラーの説明をそのバッファ(以下の例ではerrorString)に出力します。

char errorString[80];
wolfSSL_ERR_error_string(err, errorString);

ノンブロッキングソケットを使用している場合、errno EAGAIN/EWOULDBLOCKをテストするか、 より正確には特定のエラーコードSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEをテストできます。

付録F エラーコードに、wolfSSLとwolfCryptのエラーコード一覧を掲載しています。