Qt Creator 调试器显示表达式计算器的无意义值

问题描述 投票:0回答:0

我有这个简单的 qmake C++ 项目: .pro 文件:

CONFIG += c++17
QMAKE_CXXFLAGS += -O0 -ggdb3
target.path = /tmp/$${TARGET}/dev
INSTALLS += target
SOURCES += main.cpp

main.cpp 文件:


#include <chrono>
#include <iostream>

using Seconds = std::chrono::duration<int, std::ratio<1, 1>>;

struct TimeSpan
{
    Seconds seconds;
};

TimeSpan operator + (TimeSpan left, TimeSpan right) { return { left.seconds + right.seconds }; }

int main()
{
    TimeSpan a = { Seconds(1) };
    TimeSpan b = { Seconds(2) };
    TimeSpan ab = a + b;
    auto as = a.seconds;
    auto bs = b.seconds;
    auto abs = as + bs;
    std::cout <<          a.seconds.count()
              << " + " << b.seconds.count()
              << " = " << ab.seconds.count()
              << " = " << (a + b).seconds.count() << std::endl;
    std::cout <<          as.count()
              << " + " << bs.count()
              << " = " << abs.count()
              << " = " << (as + bs).count() << std::endl;

    return 0;
}

程序正确打印

1 + 2 = 3 = 3
1 + 2 = 3 = 3

但是当我在

return 0;
上放置断点并查看表达式评估器时,事情变得疯狂:

a、b、ab、as、bs 和 abs 的值是正确的 (1 + 2 = 3)。但由于某种原因,它显示了一个疯狂的值 1431658504((十六进制)55556008)用于在表达式评估器中添加
a + b
并且它根本不能做
as + bs
。有趣的是,做任何刷新调试器的事情(例如单步执行、修改求值器、更改显示格式等)都会导致值发生变化:

现在它显示 -7352((十六进制)fffffffffffffe348)。现在它停留在那个值。

怎么回事?该程序非常简单。调试器真的会在如此简单的评估中出错吗?我该怎么做才能让它正常运行?

我正在使用 Qt Creator 5.0.2
该问题在多个目标架构(x86 和 ARM)上仍然存在,但错误值不同。

c++ gdb c++17 qt-creator
© www.soinside.com 2019 - 2024. All rights reserved.