2015-03-18 3 views
0

По ошибке я стер содержимое моего Fortran исходного файла с помощью команды с участием «>»:Как восстановить исходный файл случайно перезаписаны с помощью файла объекта

some command > file.f

Я не использую систему управления версиями или что-нибудь. Тем не менее, есть файл объекта, file.o, если это может оказать какую-либо помощь. Есть ли возможность восстановить содержимое файла file.f?

ответ

0

Там может быть декомпилятор инструменты, которые могут производить Fortran исходного кода из скомпилированного кода объекта, но это не оригинального исходного кода: такие вещи, как комментарии и имена локальных переменных отбрасываются в процессе компиляции и нет в объекте файл, поэтому они не могут быть восстановлены. Структура декомпилированного кода, вероятно, также будет отличаться, особенно если файл объекта был скомпилирован с оптимизацией.

К сожалению, вы не получите исходный код из объектного файла.

+0

Спасибо за ваш ответ. Жаль, что так получилось. Перезапись кода будет проще в моих обстоятельствах, чем использование декомпиляторов. –

0

Декомпиляция отлично работает с языками байт-кода, такими как Java, которые более или менее «предназначены для этой цели».
С оптимизирующим компилятором, таким как Fortran (или C или C++), вам в значительной степени не повезло.

Инструменты существуют, которые восстанавливают какой-либо вид исходного файла (например, «бумеранг»), но он будет нигде рядом с оригиналом, и обычно это пустая трата времени даже при попытке.

Учитывая характер процесса компиляции, часто даже не возможно, чтобы отменить операцию. Не только информация, такая как имена переменных или имена неэкспортируемых функций (и, конечно, комментарии), отбрасывается, а константы заменяются магическими числами, но и скомпилированная программа может иметь совершенно иную структуру, чем написанный вами код.
Компиляторы регулярно выполняют оптимизационные операции, такие как перемещение инвариантов из циклов, переупорядочение операторов или объединение общих подвыражений (даже если оптимизация явно не включена, большинство компиляторов делает тривиальные оптимизации в любом случае).

Компилятор должен производить что-то, что ведет себя «как будто», как это наблюдается снаружи, но не то, что обязательно эквивалентно исходному коду, который вы написали.
Подобное явление существует при переходе через программу в отладчик. Иногда переменные не просматриваются, или вы не можете сломать определенную строку, и целые заявления, по-видимому, просто «уйдут» к удивлению неосознанного разработчика, потому что компилятор оптимизировал их.

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

+0

Ну, я использую его, но для других проектов. Думаю, мне придется использовать его для всех проектов без каких-либо исключений. Спасибо за ответ. –