gpt4 book ai didi

c++ - 步进 gdb 似乎显示程序语句没有任何效果

转载 作者:搜寻专家 更新时间:2023-10-31 01:54:37 26 4
gpt4 key购买 nike

我有一个在堆栈上声明的结构。这是结构的样子:

struct MyStruct {
int integer;
std::vector<bool > booleanVector;
};

当我使用 gdb 单步执行以下函数时,打印 s.integer 的值和 s.booleanVector.size() , 这些语句似乎没有效果。

MyStruct getMyStruct()
{
MyStruct s;
s.integer = 3;
s.booleanVector.resize( s.integer );
return s;
}

但是,当我插入诸如 std::cout << s.integer << std::endl; 之类的打印语句时输出显示 s.integer 的值和 s.booleanVector.size()已正确更改。

我发现问题似乎与声明它的函数返回的结构有关。如果声明它的函数没有返回它,则不会出现 gdb 显示有关该结构的无效信息的问题。

这是一个简化的示例,展示了我在尝试调试项目时遇到的问题。 gdb 的这个问题分散了我对代码中实际错误的注意力,并且很难找到它(最初我认为这个问题可能是我代码中的一个细微错误,这就是我将其发布在这里的原因)。 Here是一个完整的小程序,在我的系统上表现出这种行为。

我想我的问题是这是否只是 gdb 的一个错误,或者这种行为是由于 gcc 如何处理要从函数返回的结构/类而导致的。

注意:在 Mac OSX 10.6 (Snow Leopard) 中使用 gdb 6.3 和 gcc 4.2

最佳答案

这是 GCC 中的一个错误(见下面的链接)。

使用以下 GDB 版本时也会发生这种情况:

i686-apple-darwin9-g++-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5493) Copyright (C) 2005 Free Software Foundation, Inc.

...甚至在使用 -O0 编译时也是如此

这是 GCC 项目上完整错误跟踪器的链接:

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

生成的程序是正确运行的程序。这个问题完全与即使将build设置为“零优化”的优化也有影响,以及 gcc 放入二进制文件中的不正确的调试信息有关。

关于c++ - 步进 gdb 似乎显示程序语句没有任何效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9392294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com