代码更改无效

时间:2015-12-24 09:56:34

标签: c++ qt compilation qt-creator build-process

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

然而奇怪的事情发生了。

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

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

在构建并运行应用程序之后,执行此行并且&#34; Hello1&#34;根据需要在调试控制台中打印。我也可以使用调试器并逐行完成。构建应用程序时,编译器基本上没有做任何事情,因为没有更改代码文件(如预期的那样)。

在编辑上述内容时,我们会选择:

  • 我将线路更改为&#34; Hello2&#34;并保存了代码文件。
  • 我可以看到源文件正确更新的文件修改日期/时间,我确认该文件比相应的目标文件更新。
  • 在构建项目时,编译器实际编译了已编辑的源文件并按预期链接了应用程序。我验证了更新的目标文件日期/时间和更新可执行文件日期/时间。
  • 但是,在启动应用程序时,行为没有改变!输出仍然是&#34; Hello1&#34;。
  • 当使用二进制编辑器搜索可执行文件时,我仍然可以看到旧字符串&#34; Hello1&#34;只要。没有其他字符串包含&#34; Hello&#34;。
  • 再次执行上述操作后(将行更改为&#34; Hello3&#34;)仍然&#34; Hello1&#34;印刷。

更多事实:

  • 重新构建整个应用程序或清理项目后,更改将生效一次。
  • 每次编辑时,问题都可以重现。
  • 我无法用任何其他模块观察到这种情况,只有一个源模块才会发生这种情况,只是看起来并没有太大的不同。
  • 如上所述,代码行位于模块头中。但修改模块本身并没有改变任何东西。
  • 同时更改X类和第二个模块不会改变任何内容(第二个模块中的修改生效,X类中的修改不起作用)。
  • 标题和模块都已正确添加到.pro文件中。
  • 重新启动QtCreator不会改变任何内容。
  • 无论是否使用调试器都会发生这种情况。
  • 类X模块的Makefile规则看起来很合理,并且与其他模块的规则没有什么不同。

我不知道这是怎么回事。也许我错过了一些明显的事有什么想法吗?

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

5 个答案:

答案 0 :(得分:1)

检查调试器实际运行的exe。它可能是另一个副本!查看流程列表,了解确定调试器下的EXE。

根据我个人的经验,这个一般性问题已经出现了各种各样的原因。文件被复制到安装/暂存区域;环境影响事物;错误的项目设置为&#34;启动&#34 ;;启动调试会话时组件的运行方式最终会解析为错误的文件;错误的配置或风味正在改变;等

规则1:验证您的假设。您检查了文件日期等,但添加到检查调试器实际上是什么文件(完整路径)。

答案 1 :(得分:1)

你可以尝试一些事情:

  1. 检查您的exe是否在与创建的exe相同的路径上打开(您可以验证它是否正在查找.pro.user文件。
  2. 检查是否在编译时,它会先保存更改然后再将它们编译在一起,否则看起来它可能会这样做但不会。
  3. 如果您更改了.pro文件,请运行qmake并重新构建它。
  4. 尝试清理,运行qmake并重新构建项目。
  5. 如果您更改了.pro文件或者包含外部库或文件,请检查输出日志以查看是否一切正常,有时它不是,但仍然编译(然后链接不好或只是让你旧编译版。)
  6. 它似乎正在编译代码的最后一个“版本”,并且没有因某些原因和其他原因而应用更改(如果我认为在其他方面我将稍后编辑帖子)。

    希望有所帮助

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

在Qt 5.8下问题仍然存在:

使用clang的Qt 5.8在Qt Creator内使用OSX在OSX下为OSX构建64位时,此问题继续出现。因此,这不是海湾合作委员会的问题。

解决方案:

我能够通过以下方式获取依赖编译器以正确响应对新添加的头文件的更改:

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

检查:

在执行上述操作之前,我检查了项目文件,并确保新文件已列在listOfIdandAge部分中。尽管如此,Qt不会重建包含{{1 }}文件。