インライン関数はスタック トレースなどから除外される可能性があるため、デバッグが難しくなる可能性があることは誰もが知っています。しかし、gdb 内からインライン関数を呼び出したいとします。その名前と引数はわかっています。私はそれができるはずだと思いますが、私はこれを得ます:
Cannot evaluate function -- may be inlined
使用nm
している共有ライブラリのシンボルをリストしていたのですが、呼び出したい関数がそこにないことがわかりました。大きな驚きはありません。私が望むのは、これらのインライン関数の目に見える定義を生成する方法です。現在、インライン定義を含むヘッダー ファイルにアクセスできますが、それらのヘッダーを実際に変更することはできません。おそらく、翻訳単位で見られるすべてのインライン関数の定義を発行するようにコンパイラに指示する方法はありますか? または、gdb のインライン関数の呼び出しと結果の検査を容易にする他のトリックはありますか?
Linux で GCC 4.7.2 と GDB 7.5.1 を使用しています。また、本番環境からコア ダンプをデバッグしているため、最適化されていないビルドに実際に切り替えることはできません (開発中は、最適化をオフにするだけで済みます。そうすれば、作業は簡単になります)。