2016-04-30 96 views
2

几乎每隔一段时间,我(重新)编译一些C(或C++)的文件我的工作 - 它的方式成功,没有任何警告 - 然后我只执行我的计划实现,由于我以前一切都没有改变汇编。为了简单起见,我们假设我向我的源添加了一条指令,将一些调试信息打印到屏幕上,以便我看到麻烦的直观证据:事实上,我编译,执行并意外地没有任何内容被打印到屏幕上。你如何确定你正在运行最新的可执行文件?

这发生在我曾经当我有一个bug的代码(我跑出一个静态数组的边界)。当然,如果你的代码有某种隐藏错误(What are all the common undefined behaviours that a C++ programmer should know about?)的编译代码可以是相当多的东西。

这事我两次,当我使用了一些可笑的速度较慢的网络硬盘驱动器上 - 我猜 - 压根儿不更新编译后,我的可执行文件,我不停地奔跑和运行旧版本,尽管更新的来源。我只是在这里推测,并随时纠正我,如果这种现象是不可能的,但我怀疑它必须采取某些进程waiting for IO。当你在错误的目录(即:执行类似的,但实际上完全与你的源无关)执行旧版本时,当然可能发生这样的事情(而且他们确实这样做)。

它再次发生,这让我很烦足够问:你如何确保你的可执行文件匹配您正在使用的来源是什么?我应该比较源代码和主函数中可执行文件的日期字符串吗?我应该在编译前删除可执行文件吗?我想人们可能会通过version control做类似的事情。


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

+0

我编译和一个命令,即'让^ h运行oge &&。/ hoge',但这并不妨碍我编译时不保存编辑器上编辑的内容。 – MikeCAT

+0

事实上,忘记保存源文件是此类问题的另一个来源...... – Matsmath

+0

过程,过程,过程。尽可能自动完成构建和部署,以便您只需键入'./build foo'并且构建脚本每次都会自动将所需的所有内容都放入其中。任何手动方法注定要失败。 –

回答

1

只要使用醇”好版本控制的可能性

  1. 在方便的情况下,你可以只添加(任意)可见版本ID代码和检查(哈希,修订ID,时间戳)
  2. 如果您的项目有很多依赖文件,并且您怀疑生成的代码中的版本比旧版本更新,那么您可以(除了明显的makefile文件规则外)监控每个文件的版本,用于构建代码(VCS-相关的,但是没那么重招)
0

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

+0

我建议这样做,但这样做似乎很奇怪。这是人们在这个行业中做的事吗? – Matsmath

相关问题