如何确定您正在运行最新的可执行文件

How do you ascertain that you are running the latest executable?

本文关键字:最新 可执行文件 运行 何确定      更新时间:2023-10-16

我经常(重新)编译我正在处理的一些C(或C++)文件——顺便说一句,它在没有任何警告的情况下成功了——然后我执行程序,却意识到自上次编译以来没有任何变化。为了简单起见,我们假设我在源代码中添加了一条指令,将一些调试信息打印到屏幕上,这样我就有了麻烦的视觉证据:事实上,我编译、执行,但出乎意料的是,屏幕上没有打印任何信息。

我曾经遇到过这样的情况,当时我有一个错误的代码(我超出了静态数组的边界)。当然,如果你的代码有某种隐藏的错误(C++程序员应该知道的所有常见的未定义行为是什么?),那么编译的代码几乎可以是任何东西。

这种情况发生过两次,当时我使用了速度慢得离谱的网络硬盘,我想,它只是在编译后没有更新我的可执行文件,而且我一直在运行旧版本,尽管更新了源代码。我只是在这里推测,如果这样的现象是不可能的,我可以随时纠正我,但我怀疑它必须与等待IO的某些过程有关

好吧,当你在错误的目录中执行一个旧版本时,当然会发生这样的事情(事实确实如此)(也就是说:你执行了一些类似的东西,但实际上与你的源代码完全无关)。

这种情况再次发生,我很恼火地问:你如何确保你的可执行文件与你正在处理的源文件匹配?我应该在主函数中比较源和可执行文件的日期字符串吗?我应该在编译之前删除可执行文件吗?我想人们可能会通过版本控制来做类似的事情。


注意:有人警告我,这可能是一个主观主题,很可能注定要关闭。

只需使用好的版本控制可能性

  1. 在简单的情况下,您只需在代码中添加(任何)可见的版本id并对其进行检查(哈希、修订id、时间戳)
  2. 如果您的项目有很多依赖文件,并且您怀疑生成的代码中的版本比"最新"的版本更旧,则您可以(显然,除了良好的makefile规则)监视用于构建代码的每个文件的版本(依赖VCS,但不那么重技巧)

检查可执行文件的时间戳。这应该会给你一个提示,告诉你它是否是最近的/最新的。或者,计算可执行文件的校验和并在启动时显示它,然后您就可以知道,如果csum相同,则可执行文件没有更新。