我正在编写/调试一个使用大部分C ++进行图像处理的iPhone项目。我在Xcode下使用gdb时遇到了麻烦,因为无论何时打印数值,它们都与真正的值完全不同(比较左)
cout << "width" << width << endl;
打印出320,如果我在gdb中执行
,我会得到像805300460这样的值。
print width
我猜这是gdb的问题,而不是程序,因为我不认为我覆盖了内存,打印到stdout的值似乎是正确的。该语言自动设置为C ++。
看看这个Apple GDB doc似乎添加这个编译器标志可能有助于-gdwarf-2?不知道该怎么做。
有人遇到这个问题吗?有什么想法吗?
答案 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
这可能是您所经历的, 如果 您正在打印的值也将被用作该函数的返回值。
就我而言,该程序是一个正确运行的程序。问题完全与优化有关,即使将构建集设置为“零优化”,也与二进制中的不正确调试信息有关。但程序本身运行良好。