エラーメッセージ: シンボルファイルが見つかりません

このメッセージは Linux* のみに適用されます。インテル® VTune™ プロファイラーは、ユーザーモードのサンプリングまたはトレース中にシンボルファイルを検出できないエラーメッセージを表示することがあります。次に例を示します。


    /opt/intel/vtune_profiler/bin64/vtune -collect hotspots -r test1 - my_test_exe
    vtune: Warning: Symbol file is not found.
    vtune: The call stack passing through the module [vdso] may be incorrect.
    vtune: Using result path '/home/user/test1'
    vtune: Executing actions 75 % Generating a report
    -----------------------------------------------------
    Summary
    -----------------------------------------------------
    Elapsed Time: 6.354 CPU Time: 6.210
    ...
    vtune: Executing actions 100 % done

原因と解決方法

インテル® VTune™ プロファイラーは、シンボル解決できないモジュール [vdso] があるため (角括弧で囲まれているのが問題のモジュール)、コールスタックが正しくないことを通知します。状況によっては、[vsyscall] モジュールであるかもしれません。

vdso モジュールが動的依存関係リストにあることを確認することもできます。


    ldd -d my_test_exe linux-vdso.so.1
    => (0x00002aaaaaac6000) libtbb.so.2
    => /opt/intel/tbb/tbb40_233oss/lib/libtbb.so.2 (0x00002aaaaabc7000) libstdc++.so.6
    => /usr/intel/pkgs/gcc/4.5.2/lib64/libstdc++.so.6 (0x00002aaaaadf5000) libm.so.6
    => /lib64/libm.so.6 (0x00002aaaab117000) libgcc_s.so.1
    => /usr/intel/pkgs/gcc/4.5.2/lib64/libgcc_s.so.1 (0x00002aaaab26c000) libc.so.6
    => /lib64/libc.so.6 (0x00002aaaab481000) librt.so.1
    => /lib64/librt.so.1 (0x00002aaaab6c2000) libdl.so.2
    => /lib64/libdl.so.2 (0x00002aaaab7cb000) libpthread.so.0
    => /lib64/libpthread.so.0 (0x00002aaaab8cf000) /lib64/ld-linux-x86-64.so.2 (0x00002aaaaaaab000)

[vdso] への参照がある場合は、このメッセージを無視してもかまいません。これは、実行形式コードをメモリー空間にロードすることで、カーネルが動的に一時的なメモリー割り当てを行ったことを意味します。このメッセージは、コードの実行中にいくつかのホットスポット・サンプルが取得されたことを示します。そして、後処理時には vdso は検出できなくなっていました。モジュール linux-vdso.so.1 (以前の Linux* カーネルでは linux-vsyscall.so.1 または linux-gate.so.1) は、プログラムのアドレス空間にある仮想動的共有オブジェクト (VDSO) です。これは、CPU のマイクロアーキテクチャーに応じて、割り込みや (現代の CPU では) 高速システムコールを介して、ユーザー・アプリケーションにシステム関数への高速アクセスを提供する複雑なロジックを含む仮想ライブラリーです。

関連情報