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

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

Например:

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

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

8
задан 04.10.2010, 08:03

9 ответов

Вероятно, не, попробуйте управление исходным кодом?


Вам могло бы повезти сделать, чтобы редактор открылся или окно терминала scrollback.

И в locking-the-barn-door-after-the-horse-has-bolted отделе, хорошая практика разработки, даже когда работа над игрушечными программами должна использовать управление исходным кодом.

Или Используя мерзавца или Используя 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
15
ответ дан 07.12.2019, 13:43

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

Необходимо было использовать

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

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

7
ответ дан 07.12.2019, 13:43

Который сделал редактор Вы используете. По всей вероятности мог бы быть источник-code.cpp ~ файл резервной копии при использовании Vim или чего-то.

6
ответ дан 07.12.2019, 13:43

ой... Вам не повезло.

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

больше здесь: http://e2undel.sourceforge.net/recovery-howto.html

2
ответ дан 07.12.2019, 13:43

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

2
ответ дан 07.12.2019, 13:43

В очень маловероятном событии, что Вы еще не закрыли свой vi сеанс, откройте новый терминал и ищите a .source-code.cpp.swp файл в той же папке. Помните, что файлы, запускающиеся с периода, не перечислены ls команда по умолчанию; использовать 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>^@

.swp файл удален, после того как Вы закрыли vi сеанс; таким образом, если Вы уже закрыли его, Вам не повезло.

1
ответ дан 07.12.2019, 13:43

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

Вы не можете обратная компиляция Ваш исходный код.

0
ответ дан 07.12.2019, 13:43

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

Это - одна причина, почему необходимо использовать систему управления версиями. Выезд SVN.

0
ответ дан 07.12.2019, 13:43

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

emacs будет иметь a #source.cpp# файл.

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

0
ответ дан 07.12.2019, 13:43

Теги

Похожие вопросы