不同GDBS,不同的调试行为

问题描述:

背景不同GDBS,不同的调试行为

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

问题

我有调试器的两种选择在这样的环境:(6.3.50-20050815(版本GDB-1824)GNU GDB苹果)和GDB安装了Mac开发工具提供的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 50年3月6日所示:

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版本而没有优化的值,我应该怎么做?

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

显然是GDB打印<optimized out>未优化代码的错误。

您应该尝试使用从主干构建的GDB重现此操作,创建一个显示问题的最小测试用例并提交bugzilla错误。