Oracle® Solaris Studio 12.4: パフォーマンスアナライザ

印刷ビューの終了

更新: 2015 年 1 月
 
 

共有オブジェクトの処理

通常、collect コマンドではターゲットのアドレス空間に含まれているすべての共有オブジェクトのデータが、初期ライブラリリストに含まれているものか、dlopen() によって明示的にロードされたものかにかかわらず、収集されます。ただし、特定の条件では一部の共有オブジェクトのプロファイリングが行われないことがあります。

  • 遅延ロードによりターゲットプログラムが呼び出された場合。この場合、起動時にはライブラリがロードされず、dlopen() の呼び出しによって明示的にもロードされないため、共有オブジェクトが実験に含まれず、共有されたオブジェクトからの PC はすべて <Unknown> 関数にマップされます。回避策として、環境変数 LD_BIND_NOW を設定すると、起動時にライブラリが強制的にロードされます。

  • 実行可能ファイルが –B direct オプションを指定して構築された場合。この場合、オブジェクトは特に dlopen() の動的リンカーのエントリポイントへの呼び出しによって動的にロードされるため、libcollector 割り込みがバイパスされます。共有オブジェクト名が実験に含まれず、そのオブジェクトからのすべての PC が <Unknown>() 関数にマップされます。回避策は、–B direct オプションを使用しないことです。