几乎每隔一段时间,我(重新)编译一些C(或C++)的文件我的工作 - 它的方式成功,没有任何警告 - 然后我只执行我的计划实现,由于我以前一切都没有改变汇编。为了简单起见,我们假设我向我的源添加了一条指令,将一些调试信息打印到屏幕上,以便我看到麻烦的直观证据:事实上,我编译,执行并意外地没有任何内容被打印到屏幕上。你如何确定你正在运行最新的可执行文件?
这发生在我曾经当我有一个bug的代码(我跑出一个静态数组的边界)。当然,如果你的代码有某种隐藏错误(What are all the common undefined behaviours that a C++ programmer should know about?)的编译代码可以是相当多的东西。
这事我两次,当我使用了一些可笑的速度较慢的网络硬盘驱动器上 - 我猜 - 压根儿不更新编译后,我的可执行文件,我不停地奔跑和运行旧版本,尽管更新的来源。我只是在这里推测,并随时纠正我,如果这种现象是不可能的,但我怀疑它必须采取某些进程waiting for IO。当你在错误的目录(即:执行类似的,但实际上完全与你的源无关)执行旧版本时,当然可能发生这样的事情(而且他们确实这样做)。
它再次发生,这让我很烦足够问:你如何确保你的可执行文件匹配您正在使用的来源是什么?我应该比较源代码和主函数中可执行文件的日期字符串吗?我应该在编译前删除可执行文件吗?我想人们可能会通过version control做类似的事情。
注:我被警告说,这可能是一个主观话题可能注定要被关闭。
我编译和一个命令,即'让^ h运行oge &&。/ hoge',但这并不妨碍我编译时不保存编辑器上编辑的内容。 – MikeCAT
事实上,忘记保存源文件是此类问题的另一个来源...... – Matsmath
过程,过程,过程。尽可能自动完成构建和部署,以便您只需键入'./build foo'并且构建脚本每次都会自动将所需的所有内容都放入其中。任何手动方法注定要失败。 –