Jak zlokalizować brakujący kod C.

9

Odziedziczyłem starszy system programistyczny, który jest słabo udokumentowany, a kod źródłowy nie jest znany, jeśli nadal jest dostępny.

Teraz mogłem zlokalizować część kodu źródłowego i faktycznie zbudować jedną część systemu.

Zastanawiam się, czy mogę znaleźć resztę kodu źródłowego i czy istnieje lepszy sposób niż locate *.c ręczne sprawdzenie plików (tak znalazłem część kodu).

Istnieją 3 maszyny i tylko jedna, w której znalazłem kod źródłowy, który wydaje się być maszyną programistyczną. Ma również 61 .debarchiwów, które wydają się być spakowanymi wersjami projektów, ale patrząc na.deb archiwów pokazuje, że źródła nie ma w archiwach, a przynajmniej nie tam, gdzie szukałem.

Czy istnieje dobry sposób na „przeskanowanie” całego dysku w poszukiwaniu kodu źródłowego?

Niklas
źródło

Odpowiedzi:

9

To nie odpowie na twoje bardziej ogólne pytanie, ale w twoim konkretnym przypadku, ponieważ masz pakiety w systemie, warto poszukać odpowiedniego kodu źródłowego:

find / -name \*.orig.tar\* -o -name \*.dsc

Spowoduje to poszukiwanie archiwów źródłowych o nazwach zgodnych z oczekiwaniami narzędzi do budowania pakietów Debiana oraz plików kontrolnych pakietów źródłowych. Jeśli znajdziesz te, szukać .debian.tar*lub .diff.gzpliki obok nich. Wszystkie te pliki razem dają kod źródłowy i reguły kompilacji wraz ze wszystkimi metadanymi pakietu.

Możesz także poszukać rozpakowanych plików kontrolnych:

find / -name control

Zazwyczaj powinny znajdować się w debianpodkatalogu źródła pakietu, który powinien zawierać wszystko, czego potrzeba do przebudowania pakietu ze źródła.

Stephen Kitt
źródło
1
również: find / -wholename '*/debian/rules'. lub (szybciej, jeśli mlocate jest zainstalowany)locate -r /debian/rules$
cas
2
@cas Próbuję zagrać tutaj bezpiecznie, widziałem kilka bardzo dziwnych konfiguracji budowania pakietów Debiana. locatebyłoby szybsze, ale w przeszłości byłem rozczarowany uruchamianiem go na odzyskanych systemach, które zostały oczyszczone - locatebaza danych wciąż jest nowa na temat kodu źródłowego, który zniknął. (To może być przydatne informacje, jeśli kopie zapasowe są dostępne ...)
Stephen Kitt
1
Przechodzące przez unix.stackexchange.com/questions/382857 , nie są to pakiety Debiana.
JdeBP,
1
@JdeBP Przechodziłem przez „Ma także 61 .debarchiwów, które wydają się być spakowaną wersją projektów” (sic).
Stephen Kitt
2
@DjDac w porządku, po prostu findpróbuję odczytać pliki, w /procktórych znikają między czasem findbudowania listy plików a czasem, gdy je czyta. Możesz /proccałkowicie pominąć .
Stephen Kitt
1

Zwykle używam kombinacji skryptów do pracy z plikami źródłowymi. Podobnie jak powyższa odpowiedź nie rozwiąże dokładnie sprawy, ale wyszukiwanie symboli może pomóc w zlokalizowaniu plików źródłowych.

Do bashrc:

function list-code-files() {
    find -type f \( \
        -name '*.cpp' -o \
        -name '*.java' -o \
        -name '*.php' -o \
        -name '*.[chS]' -o \
        -name 'Makefile' -o \
        -name '*.mk' \
        \) -print0
}

function csym() {
    list-code-files | xargs -0 grep -ne "$1"
}

Następnie mogę wyświetlić listę plików źródłowych za pomocą list-code-files | xargs -0 echolub wyszukać symbole za pomocącsym some-symbol-regexeg

Kotte
źródło