我如何恢复被错误的编译命令覆盖的源代码?

我如何恢复被错误的编译命令覆盖的源代码?

我编写了一个 C++ 源代码,并使用以下命令行以相同的名称对其进行了编译。

例如:

c++ source-code.cpp -o source-code.cpp

现在我的源代码已经被可执行程序所取代了。有什么方法可以检索我的源代码吗? 我是 Linux 新手,所以我不确定是否有任何方法可以撤消我所做的事情。

答案1

可能不行,尝试一下源代码控制?


您可能很幸运地打开了一个编辑器或一个带有回滚功能的终端窗口。

在马跑了才锁门的部门中,即使在开发玩具程序时,一个良好的开发实践是使用源代码控制。

使用git或者, 你可以做

$ hg init
$ hg add source.cpp
$ hg commit -m 'change' source.cpp
$ # edit here, and you can optionally revert to the original
$ hg commit -m 'change' source.cpp
$ # now if you clobber it you can go back to one of the previous revisions

答案2

该选项-o指定了输出文件,这就是源代码被覆盖的原因。

你应该使用

c++ source-code.cpp -o executable-name

至于检索原来的编译文件中的源代码:不可以。您可以反汇编它(因此请获取程序的汇编版本),我相信有一些小程序可以从中重写一些“C++ 风格”的代码,但这永远不会像您的原始代码,因为 C++ 中的多条指令可能对应于相同的机器代码。

答案3

你用的是哪个编辑器。如果你用的是 Vim 之类的,很可能有 source-code.cpp~ 备份文件。

答案4

尝试一些磁盘恢复工具,也许新文件没有写入与原始文件相同的块上。我只是在这里大声思考,但你最好试一试。顺便问一下,你使用的是哪个编辑器?你检查过你的编辑器是否自动备份了每个文件吗?

相关内容