Como posso recuperar a fonte sobrescrita por um comando de compilação incorreto?

7

Eu escrevi um código-fonte do C ++ e o concordei com o mesmo nome usando a seguinte linha de comando.

Por exemplo:

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

Agora, meu código-fonte foi substituído pelo programa executável. Existe alguma maneira de recuperar meu código-fonte. Sou novo no Linux, então não tenho certeza se há alguma maneira de desfazer o que fiz.

    
por Pavitar 04.10.2010 / 07:03

9 respostas

15

Provavelmente não, tente o controle de código-fonte?

Você pode ter a sorte de ter um editor aberto ou uma janela de terminal com rolagem.

E no departamento de trancar a porta depois do cavalo, uma boa prática de desenvolvimento, mesmo quando se trabalha com programas de brinquedo, é usar o controle do código-fonte.

Usando git ou hg , você pode fazer

$ 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
    
por 04.10.2010 / 07:11
7

A opção -o especifica o arquivo de saída, é por isso que o código-fonte foi sobrescrito.

Você deveria ter usado

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

Quanto à recuperação da fonte original do arquivo compilado: não, você não pode. Você pode desmontá-lo (para obter uma versão assembly do seu programa) e tenho certeza de que existe algum pequeno programa que irá reescrever algum código "estilo C ++", mas que nunca será como o seu código original uma instrução em C ++ pode corresponder ao mesmo código de máquina.

    
por 04.10.2010 / 07:08
6

Qual editor você usou? O mais provável é que haja o arquivo source-code.cpp ~ backup se você estiver usando o Vim ou algo assim.

    
por 04.10.2010 / 07:13
2

oops ... você está sem sorte.

First of all: Immediately unmount the file system the deleted file was located on. This minimizes the risk that the data of the deleted file are overwritten while taking steps to recover them. All data written to the file system containing the deleted file - either by you or by any other process running on your machine - might overwrite some of the data you want to recover!

mais aqui: link

    
por 04.10.2010 / 07:15
2

Tente alguma ferramenta de recuperação de disco, talvez o novo arquivo não tenha sido escrito nos mesmos blocos que o original. Eu estou apenas pensando em voz alta aqui, mas é melhor que você tenha dado uma chance. Btw qual editor você está usando? Você verificou se o seu editor cria um backup automático de todos os arquivos?

    
por 04.10.2010 / 10:24
1

No caso altamente improvável de você ainda não ter fechado sua sessão, abra um novo terminal e procure por um arquivo .source-code.cpp.swp na mesma pasta. Lembre-se de que os arquivos que começam com um período não são listados pelo comando ls por padrão; use ls -A para vê-los.

A última linha do arquivo .swp teria o texto do seu arquivo original antes de ser corrompido por uma má compilação.

Meu arquivo original test.cpp

#include <iostream>
using namespace std;

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

A última parte do meu .test.cpp.swp (neste caso, continha uma única linha enorme).

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

O arquivo .swp é excluído assim que você fecha a sessão vi; então se você já fechou, você está sem sorte.

    
por 04.10.2010 / 12:10
0

não, a menos que você possa desfazer sua ação pelo Linux, seu código-fonte será perdido. Você provavelmente deveria ter compilado para um nome diferente.

Você não pode fazer a compilação reversa do seu código-fonte.

    
por 04.10.2010 / 07:06
0

Eu não direi que é impossível. O FBI provavelmente pode obter uma parte dele de volta com uma enorme ajuda de sorte. Mas desde que o seu executável é certamente maior do que a sua fonte, você substituiu tudo isso.

Esse é um dos motivos pelos quais você deve usar um sistema de controle de versão. Confira o SVN .

    
por 04.10.2010 / 07:11
0

Como mencionado por @ jase21, se você usou vim ou gedit , haverá um arquivo source.cpp~ que contém um backup.

emacs terá um arquivo #source.cpp# .

Qual editor de texto você usou? Em uma nota mais clara, quantas linhas de código perderam?

    
por 04.10.2010 / 07:24