0

コード内のシンボル検索エラーをキャッチして、現在プログラムがクラッシュするようにするにはどうすればよいですか?

void main()
{
  try {
    dlopen("shared.so", RTLD_LAZY);
    /** 
      now running a function in this shared object and 
      this function calls a undefined reference
      and then it crashes but i want to go in the catch block
    */
  } catch(...) {
  }
}
4

1 に答える 1

6

dlopenC機能です。何もスローしませんexception

void *dlopen(const char *filename, int flag);

からman dlopen

dlopen()が何らかの理由で失敗した場合、NULLを返します。

したがって、の戻り値を確認してくださいNULL

したがって、確認のために、そのシンボルが存在することを確認するために使用する必要があります

void *dlsym(void *handle, const char *symbol);

シンボルが見つからない場合、指定されたライブラリー、またはそのライブラリーがロードされたときにdlopen()によって自動的にロードされたライブラリーのいずれかで、dlsym()はNULLを返します。(dlsym()によって実行される検索は、最初にこれらのライブラリの依存関係ツリーを介して幅優先されます。) シンボルの値は実際にはNULLである可能性があるため(dlsym()からのNULL戻りはエラーを示す必要はありません)、正しい方法エラーをテストするには、dlerror()を呼び出して古いエラー状態をクリアしてから、dlsym()を呼び出し、次にdlerror()を再度呼び出して、戻り値を変数に保存し、この保存された値がNULLでないかどうかを確認します

于 2012-09-07T09:03:47.737 に答える