Oracleのlibclntshに対してリンクされているCコードをインストルメント化すると、結果のプログラムを実行するときにクラッシュが発生します。プログラムは「IllegalInstruction」信号で終了します。
このバグは、Oracle11gおよびPurifyの少なくとも一部のバージョンに存在します。
これは既知のバグであり、IBMは回避策を公開しています。残念ながら、回避策は私の作業環境では役に立ちません。
使ってます
$ purify -version
Version 7.0.1.0-002.U 120210 Solaris SPARC
SunSPARCハードウェア上のSolaris10で。CソースをSunCC11でコンパイルします。
回避策で説明されているように、私は次のようにlibclntshをインストルメンテーションから除外しようとしました。
$ purify -verbose -cache-dir=purify_cache -always-use-cache-dir \
-selective -exclude-libs=/oracle/app/rdbms/ora11203/lib/libclntsh.so.11.1 \
cc -o myprogram ... -lclntsh
これは動作しません。Purifyは、libclntsh.so.11.1をインストルメントしていると言っているだけで、確かに、対応する_pp3_
ファイルを取得しますが、1つではありません_pp0_
。
除外パターンのバリエーションを試しました。
-exclude-libs=libclntsh.so.11.1
-exclude-libs=clntsh.so
成功せずに。
libclntshを除外できることは、インストルメンテーション時間にも大きく影響します。このSPARCマシンでは、libclntsh.soをインストルメント化するのに数分かかります。
回避策を見ると、HPUXについて言及しているだけですが、Solarisでも適用できることを願っています...どういうわけか。