如何确定您正在运行最新的可执行文件
How do you ascertain that you are running the latest executable?
我经常(重新)编译我正在处理的一些C(或C++)文件——顺便说一句,它在没有任何警告的情况下成功了——然后我执行程序,却意识到自上次编译以来没有任何变化。为了简单起见,我们假设我在源代码中添加了一条指令,将一些调试信息打印到屏幕上,这样我就有了麻烦的视觉证据:事实上,我编译、执行,但出乎意料的是,屏幕上没有打印任何信息。
我曾经遇到过这样的情况,当时我有一个错误的代码(我超出了静态数组的边界)。当然,如果你的代码有某种隐藏的错误(C++程序员应该知道的所有常见的未定义行为是什么?),那么编译的代码几乎可以是任何东西。
这种情况发生过两次,当时我使用了速度慢得离谱的网络硬盘,我想,它只是在编译后没有更新我的可执行文件,而且我一直在运行旧版本,尽管更新了源代码。我只是在这里推测,如果这样的现象是不可能的,我可以随时纠正我,但我怀疑它必须与等待IO的某些过程有关
好吧,当你在错误的目录中执行一个旧版本时,当然会发生这样的事情(事实确实如此)(也就是说:你执行了一些类似的东西,但实际上与你的源代码完全无关)。
这种情况再次发生,我很恼火地问:你如何确保你的可执行文件与你正在处理的源文件匹配?我应该在主函数中比较源和可执行文件的日期字符串吗?我应该在编译之前删除可执行文件吗?我想人们可能会通过版本控制来做类似的事情。
注意:有人警告我,这可能是一个主观主题,很可能注定要关闭。
只需使用好的版本控制可能性
- 在简单的情况下,您只需在代码中添加(任何)可见的版本id并对其进行检查(哈希、修订id、时间戳)
- 如果您的项目有很多依赖文件,并且您怀疑生成的代码中的版本比"最新"的版本更旧,则您可以(显然,除了良好的makefile规则)监视用于构建代码的每个文件的版本(依赖VCS,但不那么重技巧)
检查可执行文件的时间戳。这应该会给你一个提示,告诉你它是否是最近的/最新的。或者,计算可执行文件的校验和并在启动时显示它,然后您就可以知道,如果csum相同,则可执行文件没有更新。
相关文章:
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- CMake:如何将库 A 链接到库 B,然后将可执行文件链接到库 A
- 如何使字符串出现在编译的二进制可执行文件的开头?
- 程序在使用 system() 启动另一个可执行文件时停止
- 如何更改使用 CPack 安装的可执行文件的名称?
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- CMake:我们可以为一组不形成可执行文件或库的特定文件指定包含目录吗?
- 如何将图像传入C++可执行文件并将输出图像存储在新目录中?
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 如何在 linux 可执行文件中使用静态库
- 错误:当我从"WinDbg"打开可执行文件时,找不到符号文件。默认导出 ntdll 的符号.dll
- 编译的C可执行文件被Windows defender检测为病毒
- Linux 可执行文件通过 dlopen 在emplace_back崩溃打开共享库
- 是否可以在命令行中将输入参数传递给可执行文件
- 如何在可执行文件中存储常量数组?
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 可执行文件C++包括.obj,.lib和.dll吗?
- 无法在 Linux 上运行C++ ZMQ 项目的可执行文件
- 如何确定您正在运行最新的可执行文件