使用C ++在Xcode GDB中打印不会打印正确的值

时间:2009-09-01 13:16:55

标签: c++ xcode gdb printing

我正在编写/调试一个使用大部分C ++进行图像处理的iPhone项目。我在Xcode下使用gdb时遇到了麻烦,因为无论何时打印数值,它们都与真正的值完全不同(比较左)     cout << "width" << width << endl; 打印出320,如果我在gdb中执行
print width
,我会得到像805300460这样的值。

我猜这是gdb的问题,而不是程序,因为我不认为我覆盖了内存,打印到stdout的值似乎是正确的。该语言自动设置为C ++。

看看这个Apple GDB doc似乎添加这个编译器标志可能有助于-gdwarf-2?不知道该怎么做。

有人遇到这个问题吗?有什么想法吗?

3 个答案:

答案 0 :(得分:1)

快速刺入,您使用了哪些优化?如果您正在使用某些值,则可能会将值保存在寄存器中,而不是在那时写入内存,因此您将获得内存中的任何值。在这种情况下,您将通过iostream获得正确的答案,因为编译器必须使可观察的行为与语言所说的相匹配,但gdb会在幕后查看。

答案 1 :(得分:1)

在gdb中尝试:

p /d width

也许编码是不同的。

我不认为“矮人”参数会有所帮助。 Dwarf params在编译期间用源代码描述中间代码。 基本上,他们尝试在编译阶段保留源代码。 在gdb中,它允许您将源代码中的行号与二进制语句进行匹配。 这个问题不应该与变量有任何关系。

答案 2 :(得分:0)

使用以下GDB版本时遇到了类似的问题:

  

i686-apple-darwin9-g ++ - 4.0.1(GCC)4.0.1(Apple Inc. build 5493)   版权所有(C)2005 Free Software Foundation,Inc。

我了解到问题可能是由于此GCC编译器问题所致:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44731

这可能是您所经历的, 如果 您正在打印的值也将被用作该函数的返回值。

就我而言,该程序是一个正确运行的程序。问题完全与优化有关,即使将构建集设置为“零优化”,也与二进制中的不正确调试信息有关。但程序本身运行良好。