2012-02-21 10 views
2

私はすべてのローカル変数のための<optimized out>を取得し始めた共有ライブラリ内の関数にステップインするとき、共有ライブラリGDBデバッグ共有ライブラリ<アウト最適化>問題

をデバッグするGDBを使用しようとしている(書かれました私はスタティックライブラリ(.a)にリンクしている共有ライブラリ(.so)にリンクしようとしましたが、Makefileに最適化が設定されていないことを確認しました。つまり、-O0と-gが両方とも設定されています。ライブラリとライブラリハーネス

これまでに奇妙なことに私はそれをデバッグできました。<optimized out>が唯一出現しました最近、私はなぜ、どう考えているのかわかりません。元々ローカル変数を見ることができました

私はこれがあいまいな質問であり、それを並べ替えるために提供する必要のあるあらゆる種類の情報があることを知っています。 Makefiles、ソースコードなどですが、誰かがこの高いレベルの記述から問題を認識し、潜在的な修正を提供する可能性があります。

答えて

4

はごく最近登場しますが、私はあなたが最適化されたコードをデバッグするとき<optimized out>にのみ表示されることができる理由

見当がつかない。あなたは何-O*フラグは、コンパイルライン(ちょうど実際コンパイルログを調べ、Makefileに見ていない)中に存在していないことを確認しましたので

は、論理的な結論は誰かがインストールされていることである異なる(最適化)あなたのライブラリのバージョンをシステム上の別の場所に置き、にリンクしていることを確認してください。バージョンです。

Linux(および他の多くのUNIXシステム)では、リンク行に-Wl,-tフラグを追加して、リンク時に実際に使用されているライブラリを確認できます。

共有ライブラリを使用する場合、GDB info sharedコマンドを実行すると、実行時に選択されたライブラリが表示されます。

関連する問題