7

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

Например:

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

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

9 ответов9

15

Наверное, нет, попробуйте контроль версий?


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

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

Используя 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
7

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

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

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

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

6

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

2

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

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

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

2

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

1

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

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

Мой оригинальный файл 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; так что если вы уже закрыли его, вам не повезло.

0

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

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

0

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

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

0

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

emacs будет файл #source.cpp# .

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .