代码更改不生效

Code changes do not take effect

我刚开始在 Kubuntu 15.10 上使用 Qt Creator 3.5.0、Qt 5.4.2 和 GCC。我创建了一个新项目,添加了一个 window,目前我正在尝试开发一个新模块。

然而奇怪的事情发生了。

我在我的模板 class X 中写了一个调试输出行。该行位于其模块 header 中的 class X 函数中,例如:

qDebug() << "Hello1" << endl;

构建和 运行 应用程序后,将执行此行,并根据需要在调试控制台中打印 "Hello1"。我也可以使用调试器并单步执行该行。在构建应用程序时,编译器基本上什么都不做,因为没有更改代码文件(如预期的那样)。

当编辑上面的行时,事情变得很奇怪:

更多事实:

我不知道这怎么可能。也许我错过了一些明显的东西。有什么想法吗?

更新: 使用系统监视器我可以确认 运行 进程使用了​​预期的可执行文件。

检查调试器实际上是哪个 exe 运行ning。它可能是另一个副本!查看进程列表可以确定调试器下的 EXE 是什么。

根据我的个人经验,由于各种原因会出现此一般性问题。文件被复制到 install/staging 区域;环境影响事物;错误的项目设置为"start up";启动调试会话时组件为 运行 的方式最终解析为错误的文件;更改了错误的配置或风格;等等

规则 1:验证您的假设。您检查了文件日期等,但还检查了调试器下实际存在的文件(完整路径)。

您可以尝试一些事情:

  1. 检查您打开的 exe 是否在与创建的相同的路径上(您可以查看 .pro.user 文件来验证它。
  2. 检查当你编译时,它是否先保存了更改然后一起编译,否则看起来它做了但实际上没有。
  3. 如果您更改了 .pro 文件 运行 qmake 并重新构建它。
  4. 尝试清理,运行ing qmake 并重新构建项目。
  5. 如果您更改了 .pro 文件或包含外部库或文件,请检查输出日志以查看是否一切正常,有时不是,但仍然可以编译(然后不会 link好吧,或者只是让你使用旧的编译版本。

它似乎正在编译您代码的最后一个 'version',并且出于某些原因和其他原因没有应用更改(如果我考虑其他事情,我稍后会编辑 post ).

希望对您有所帮助

我也遇到过这个问题。我能够通过清理解决它(在我的情况下 运行 catkin clean)然后 re-building 它(catkin_make)。

不幸的是,我无法找出问题的确切原因,但希望更有知识的人有一个想法。

此外,我的开发环境不同(Ubuntu 14.04、Qmake 3.1、Qt 5.9.1、gcc 4.8.4、catkin tools 0.4.4、Qt Creator 等)所以显然我的修复可能不会为每个人工作。

修改您的 main.cpp 并重新编译这应该会更新您的代码。不知道为什么会这样,但我添加了一个 cout << "Ver: 1 \n";并在每次更改头文件时更新编号。这似乎是一种解决方法。

Qt 5.8下问题依然存在:

Qt 5.8 使用 clang,在 Qt Creator 中为 OSX 下的 OSX 构建 64 位时,此问题继续出现。所以这不是 GCC 问题。

解法:

我能够通过以下方式获得相关编译以正确响应对新添加的头文件的更改:

  • 正在清理项目
  • 运行 QMake
  • 重建整个项目。

支票:

在执行上述操作之前,我检查了项目文件并确保新文件列在 HEADERS 部分(确实如此。)尽管如此,Qt 不会重建包含 .h 文件.