C/C++ バイナリ ライブラリ (*.dll、*.sys)、それらを構成する obj ファイル、およびそれらのシンボル (pdb) がありますが、ソース コードやマップ ファイルはありません。
シンボルによると、それらは Intel コンパイラ (Windows 用) によってビルドされました。
特定の関数がインライン化されているかどうかを確認する方法はありますか?
前もって感謝します。
C/C++ バイナリ ライブラリ (*.dll、*.sys)、それらを構成する obj ファイル、およびそれらのシンボル (pdb) がありますが、ソース コードやマップ ファイルはありません。
シンボルによると、それらは Intel コンパイラ (Windows 用) によってビルドされました。
特定の関数がインライン化されているかどうかを確認する方法はありますか?
前もって感謝します。
ICC は特にインライン化に積極的であり、多くの場合、関数が宣言されているinline
場合 (特に__forceinline
MSVC で宣言されている場合)、インライン化できない場合、コンパイル段階で実際にエラーがスローされます (明らかに、プロジェクトのコンパイル設定で)。
とは言っても、正直なところ、必要なことを実行できる唯一の方法は、デバッガーをアタッチし、MSVC でアプリを一時停止し、ASM ビューに切り替えて、探している関数の呼び出しを検索することです (あなたが言うにはC/C++ では違いがあり、C++ の場合と同様に、マングルされた名前を検索する必要があります)。関数 ( call _myFunc
) の呼び出しが見つかった場合は、インライン化されていません。
それ以外の場合は、どこを見ればよいかわかっている場合は、ASM をブラウズして呼び出し元の関数を見つけ、そのソースを調べて、呼び出し先への呼び出しがあるかどうかを確認します。
かなり難しそうに聞こえるかもしれませんが、実際には簡単ですぐに実行できctrl+f
ます。