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

每隔一段时间我(重新)编译一些我正在处理的C(或C ++)文件 – 顺便说一句,没有任何警告 – 然后我执行我的程序,只是意识到自从我以前的编译以来没有任何改变 。 为了简单起见,我们假设我给我的源添加了一条指令,将一些debugging信息打印在屏幕上,这样我就有了麻烦的直观证据:事实上,我编译,执行,并且意外地没有任何内容被打印到屏幕上。

当我有一个错误的代码(我跑出了一个静态数组的界限),这发生了一次。 当然,如果你的代码有某种隐藏的 bug( 一个C ++程序员应该知道的所有常见的未定义的行为是什么? ),编译的代码可以是任何东西。

当我使用一些速度慢得可怕的networking硬盘时,这种事情发生了两次,我猜 – 编译后没有更新我的可执行文件,尽pipe更新了源代码,我还是继续运行并运行旧版本。 我只是在这里推测,如果这种现象是不可能的,可以自由地纠正我,但是我怀疑它不得不在一些等待IO的进程上做些什么。

那么,当你在错误的目录中执行旧版本(即:执行类似的事情,但实际上完全与源无关)时,这样的事情当然会发生(而且确实如此)。

这又一次发生了,这让我感到很烦恼,请问:您如何确保您的可执行文件与您正在处理的源代码相匹配? 我应该比较主函数中的源代码和可执行文件的datestring吗? 我应该在编译前删除可执行文件吗? 我想人们可能会通过版本控制来做类似的事情。


注:我被警告说这可能是一个可能注定要closures的主观话题。

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

  1. 在简单的情况下,你可以在代码中添加(任何)可见的版本ID,并检查它(散列,修订ID,时间戳)
  2. 如果你的项目有很多依赖文件,而且你怀疑在生成的代码中比旧版本更新,那么你可以监视每个文件的版本(用于构建代码的文件(VCS-依赖,但不是那么重的把戏)

检查您的可执行文件的时间戳。 这应该给你一个关于它是否是最近/最新的暗示。 另外,为你的可执行文件计算一个校验和,并在启动时显示它,然后你有一个线索,如果csum是相同的,可执行文件没有被更新。