不同的GDB,不同的调试行为

时间:2013-03-21 17:09:12

标签: macos gdb homebrew

背景

我正在尝试调试使用某些个人动态库的C ++代码。我使用的是Mac OSX,但我没有使用llvm / clang来编译我的代码和库。目前,我正在使用自制软件提供的GNU g ++编译器(4.7)。

问题

我在这种环境中有两种调试器选择:Mac Developer Tools(GNU gdb 6.3.50-20050815(Apple版本gdb-1824))提供的gdb版本和使用自制程序安装的gdb(GNU gdb(GDB)7.5) 0.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版本?

1 个答案:

答案 0 :(得分:1)

  

为什么在这种情况下我会得到两种不同的gdb行为?如果没有优化值,我应该怎么做才能使用最新的gdb版本?

对于未优化的代码,GDB打印<optimized out>显然是一个错误。

你应该尝试使用从trunk构建的GDB重现这一点,创建一个显示问题的最小测试用例,并提交一个bug bugzilla。