Как я могу восстановить источник, перезаписанный плохой командой компиляции?

Я написал исходный код C++ и выполнили его с тем же именем, используя следующую командную строку.

например:

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

теперь мой исходный код был заменен на исполняемую программу.есть ли способ, чтобы получить мой исходный код. Я новичок в Linux, поэтому я не уверен, есть ли способ отменить то, что я сделал.

9 ответов:

вероятно, нет, попробуйте систему управления версиями?


вы можете быть достаточно удачливы, чтобы иметь открытый редактор или окно терминала с прокруткой.

и в отделе запирания двери сарая после лошади хорошая практика разработки даже при работе над игрушечными программами заключается в использовании управления исходным кодом.

используя git или hg, вы можете делать

$ 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

параметр -o задает выходной файл, поэтому исходный код был переписан.

вы должны использовать

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

для получения оригинал исходный код из скомпилированного файла: нет нельзя. Вы можете разобрать его (так что получите сборочную версию своей программы), и я уверен, что есть какая-то небольшая программа, которая перепишет из него код "C++ style", но это никогда не будет похоже на ваш исходный код как более чем один инструкция на C++ может соответствовать тому же машинному коду.

какой Редактор вы используете. Скорее всего, там может быть исходный код.cpp~ файл резервной копии, если вы используете Vim или что-то в этом роде.

упс ... вам не повезло.

прежде всего: немедленно размонтировать файловая система удаленный файл расположен на. Это минимизирует риск что данные удаленного файла затирается, одновременно предпринимая шаги для восстановить их. все данные, записанные в файловая система, содержащая удаленные файл-либо вами, либо любым другим процесс, запущенный на вашем компьютере - может переписать некоторые данные, которые вы хотеть выздоравливай!

подробнее здесь: http://e2undel.sourceforge.net/recovery-howto.html

попробуйте какой-нибудь инструмент восстановления диска, возможно, новый файл не был написан на тех же блоках, что и исходный. Я просто думаю вслух здесь, но лучше, что вы дали этому шанс. Кстати, какой Редактор вы используете? Вы проверили, создает ли ваш редактор автоматическую резервную копию каждого файла?

в маловероятном случае, если вы еще не закрыли VI сессию, откройте новый терминал и найдите .source-code.cpp.swp файл в той же папке. Помните, что файлы, начинающиеся с точки, не перечисленные по умолчанию; использовать ls -A чтобы увидеть их.

последняя строка .swp файл будет иметь текст из исходного файла, прежде чем быть повреждены mal-компиляции.

мой исходный файл test.cpp

#include <iostream>
using namespace std;

int main()
{
        cout << "Hello World!" << endl;
        cout << "Let us C";
}

последняя часть мой .test.cpp.swp (в данном случае он содержал одну огромную строку).

@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
@^@^@^cout << "Let us C";^@   cout << "Hello World!" << endl;^@{^@int main()^@^@using namespace std;^@#i    nclude <iostream>^@

на удаляются после закрытия VI сессии; так что если вы уже закрыли его, вам не повезло.

нет, если вы не можете отменить свое действие через Linux, ваш исходный код будет потерян. Вероятно, вы должны были скомпилировать его под другим именем.

вы не можете отменить компиляцию исходного кода.

Я не скажу, что это невозможно. ФБР, вероятно, может получить некоторую часть его обратно с огромной кучей удачи. Но так как ваш исполняемый файл, безусловно, больше, чем ваш источник, вы перезаписали все это.

Это одна из причин, почему вы должны использовать систему контроля версий. Проверьте SVN.

как упоминал @jase21, если бы вы использовали vim или gedit, будет source.cpp~ файл, содержащий резервную копию.

emacs будет .

какой текстовый редактор вы используете? На более легкой ноте, сколько строк кода потеряли?