0

バックグラウンド

いくつかの個人用動的ライブラリを使用する C++ コードをデバッグしようとしています。Mac OSX を使用していますが、llvm/clang を使用してコードやライブラリをコンパイルしていません。現時点では、homebrew が提供する GNU g++ コンパイラ (4.7) を使用しています。

問題

この環境では、2 つのデバッガーの選択肢があります。Mac 開発者ツールで提供される gdb バージョン (GNU gdb 6.3.50-20050815 (Apple バージョン gdb-1824)) と、homebrew でインストールされる gdb (GNU gdb (GDB) 7.5.1) です。 . 私は後者を使用したいと思いますが、それを使用すると、多くの重要な変数が最適化されて表示されます。

たとえば、これは gdb 7.5.1 を使用した私のプログラムの出力の抜粋です。

Breakpoint 1, MWE::Outputs (this=<optimized out>, time=<optimized out>)
    at /Users/ynet/temp/mwe.cpp:203
203     cout << "example" << endl;
(gdb) p this
$1 = <optimized out>

gdb 6.3.50 が示している間:

Breakpoint 1, MWE::Outputs (this=0x100601080, time=0.64300000000000046) at /Users/ynet/temp/mwe.cpp:203
203     cout << "example" << endl;
(gdb) p this
$1 = (MWE * const) 0x100601080

両方のプログラムは同一です (つまり、同じ実行可能ファイルです)。Apple Developer Tools が提供する llvm/clang コンパイラではなく、自作の g++-4.7 でコンパイルされています。gdb の最適化結果に関する質問とは異なり、「-O0」でコンパイルしていることを確認しました (現在のフラグは「-O0 -g -ggdb」です)。

質問

この場合、gdb の 2 つの異なる動作が発生するのはなぜですか? また、最適化された値を使用せずに最新の gdb バージョンを使用するにはどうすればよいですか?

4

1 に答える 1

1

この場合、gdb の 2 つの異なる動作が発生するのはなぜですか? また、最適化された値を使用せずに最新の gdb バージョンを使用するにはどうすればよいですか?

<optimized out>GDB が最適化されていないコードを出力するのは明らかにバグです。

トランクから構築された GDB でこれを再現し、問題を示す最小限のテスト ケースを作成し、バグ bugzilla をファイルする必要があります。

于 2013-03-21T20:21:28.757 に答える