【发布时间】:2013-03-21 17:09:11
【问题描述】:
背景
我正在尝试调试使用一些个人动态库的 C++ 代码。我正在使用 Mac OSX,但我没有使用 llvm/clang 来编译我的代码或库。目前,我使用的是自制软件提供的 GNU g++ 编译器(4.7)。
问题
在这个环境下,我有两种调试器可供选择:Mac Developer Tools 提供的 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
两个程序是相同的(即它是相同的可执行文件);它是用自制的 g++-4.7 编译的,而不是 Apple Developer Tools 提供的 llvm/clang 编译器。 与关于 gdb 的优化结果的问题不同,我检查了我正在使用“-O0”进行编译(我当前的标志是“-O0 -g -ggdb”)
问题
为什么在这种情况下我会得到两种不同的 gdb 行为,我应该怎么做才能使用没有优化值的最新 gdb 版本?
【问题讨论】: