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

时间:2016-04-30 15:15:27

标签: c++ c linux version-control operating-system

我经常(重新)编译我正在处理的一些C(或C ++)文件 - 顺便说一句,没有任何警告就成功了 - 然后我执行我的程序只是为了意识到什么都没有改变自从我之前的编译。为了简单起见,我们假设我向我的源添加了一条指令,将一些调试信息打印到屏幕上,这样我就有了一个麻烦的视觉证据:的确,我编译,执行,并且意外地没有任何东西是印在屏幕上。

当我有一个有缺陷的代码时(我跑出静态数组的边界),这发生在我身上。当然,如果你的代码有某种隐藏错误(What are all the common undefined behaviours that a C++ programmer should know about?),那么编译后的代码几乎可以是任何东西。

当我使用一些非常慢的网络硬盘驱动器时,这发生了两次 - 我想 - 编译后只是更新我的可执行文件,并且我一直在运行并运行旧的版本,尽管更新源。我只是在这里推测,如果这种现象不可能,我可以随意纠正我,但我怀疑它必须对某些过程waiting for IO做些什么。

嗯,当你在错误的目录中执行旧版本时,这样的事情当然会发生(而且确实会发生)(也就是说:你执行某些类似的,但实际上与你的完全无关源)。

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

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

2 个答案:

答案 0 :(得分:1)

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

  1. 在简单的情况下,您可以在代码中添加(任意)可见版本ID并检查它(散列,修订版ID,时间戳)
  2. 如果您的项目有很多依赖文件而您怀疑旧版本,而不是#34;最新",在生成的代码中,您可以(除了显而易见的,良好的makefile规则)监视每个文件的版本,用于构建代码(依赖于VCS,但不是那么重的技巧)

答案 1 :(得分:0)

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