Jak odnaleźć "martwy" kod w Delphi 7

Jak odnaleźć "martwy" kod w Delphi 7
TO
  • Rejestracja:prawie 20 lat
  • Ostatnio:ponad 4 lata
0

Czyli mamy jakąś procedurę zdarzeniową, ale nie ma powiązanego z nią obiektu (np. Button1Click, ale Button1 został skasowany i zostają po nim procedurki zdarzeniowe).

Oczywiście można przelatywać ręcznie kod i patrzeć na niebieskie kropeczki na Glitter (czy Glutter) barze (po lewej w oknie edycji kodu - tam, gdzie sie klika, żeby postawić BreakPointa), ale przy dużym projekcie bywa to uciążliwe. Po 20 000 linii kodu można dostać oczopląsu. Nie chciałbym też żadnego narzędzia, które automatycznie czyści martwy kod.

Po prostu chciałbym wiedzieć które procedury/funkcje są martwe/nie podpięte, żeby posprzątać trochę kod i zapobiec ew ryzyku, że kiedy ponownie utworzę obiekt danego typu, a Delphi automatycznie nada mu nazwę z numerem, który był użyty wcześniej - może się zdarzyć, że podepnę niewłaściwą procedurę.

Np. Jest wspomniany Button1. Definiuje dla niego Button1Click, Potem definiuje Button2, Button3, itd. razem z odpowiednimi procedurkami zdarzeniowymi dla nich. Kasuję Button1. Procedura Button1Click pozostaje. Działam dalej - tworzę kolejne obiekty innego typu po czym znów potrzebuję buttona, więc go tworzę. Delphi generuje mi automatyczną nazwę Button1 (ponownie, bo ma wolne miejsce). klikam dwa razy. POdpina się automatycznie procedura Button1Click utworzona za pierwszym razem. W roztargnieniu nie zwracam uwagi co w niej było, a później zaczyna się zabawa dlaczego program zachował się tak a nie inaczej.

edytowany 3x, ostatnio: lofix
Opi
  • Rejestracja:ponad 20 lat
  • Ostatnio:około 4 godziny
  • Postów:1029
0

To ja dodam, że identycznie jest ze zmiennymi lub stałymi globalnymi.
Także nie ma choćby ostrzeżenia o ich nieużywaniu.

pelsta
  • Rejestracja:prawie 19 lat
  • Ostatnio:2 dni
  • Postów:819
0

Przed skasowaniem jakiegoś komponentu zawsze sprawdzam w Inspektorze Obiektów w zakładce Events które zdarzenia oprogramowałem i usuwam je z kodu.
Jeśli chodzi o zmienne czy stałe globalne to można zakomentować ich deklaracje i spróbować skompilować program - wyjdzie czarno na białym które są używane.

TO
  • Rejestracja:prawie 20 lat
  • Ostatnio:ponad 4 lata
0
pelsta napisał(a)

Przed skasowaniem jakiegoś komponentu zawsze sprawdzam w Inspektorze Obiektów w zakładce Events które zdarzenia oprogramowałem i usuwam je z kodu.
Jeśli chodzi o zmienne czy stałe globalne to można zakomentować ich deklaracje i spróbować skompilować program - wyjdzie czarno na białym które są używane.
Oczywiście masz całkowitą rację, że nie ma jak Best Practices.

Ale życie jest życiem. Czasem coś dziabniesz, albo co więcej - kopiujesz jakąś kontrolkę, albo grupę kontrolek. Spieszysz się, bo siedzisz u klienta, który stoi nad tobą i oczekuje szybkiego rozwiązania problemu. Dodajesz, kasujesz, mieszasz, kombinujesz i ... zapominasz posprzątać. Wiadomo. Życie.

Jak siedzisz w ciepłych bamboszach w biurze/domu i masz czas się zastanowić - super. Czasem w wirze walki zdarzają się takie sytuacje i co jakiś czas warto pozamiatać miejsce pracy.

Co do zmiennych - kompilator zgłasza Warning: Declared, but not used. Zrób rebuilda - zobaczysz.

edytowany 4x, ostatnio: toyman
pelsta
  • Rejestracja:prawie 19 lat
  • Ostatnio:2 dni
  • Postów:819
0
toyman napisał(a)

Co do zmiennych - kompilator zgłasza Warning: Declared, but not used. Zrób rebuilda - zobaczysz.

Dla zmiennych deklarowanych w sekcji interface nie zgłasza.

I jeszcze jeden tip.
Każdy nowy projekt umieszczam w nowym katalogu. Przed dokonaniem jakichkolwiek zmian w projekcie robię kopię zapasową tego katalogu. Gdy zmiany nie satysfakcjonują mnie przywracam poprzednią wersję z zapasu i po kłopocie.

edytowany 1x, ostatnio: pelsta
TO
  • Rejestracja:prawie 20 lat
  • Ostatnio:ponad 4 lata
0

Ja też od pewnego czasu (mniej więcej dwa lata) używam wersjonowania (nie CSV/SVN tylko Build project)- to znaczy przed rozpoczęciem prac nad kolejnym buildem, poprzedmi jest zgrywany do osobnego katalogu w celach archiwalno-porownawczych.

Ale to działa, jeżeli pracujemy nad wersjami 'Pudełkowymi'.

Jak pracuję nad projektem jednostkowym bez wersjonowania - robie zwykly backup.

Co nie zmienia faktu, że odbiegamy delikatnie od tematu.

Znalazłem interesujący wątek:
http://stackoverflow.com/questions/4226970/finding-unused-aka-dead-code-in-delphi
ale jeszcze nie miałem czasu tego przetestowac - tym bardziej, że częśc z tych narzędzi działa na D2007, a ja wciąż używam D7.

Opi
  • Rejestracja:ponad 20 lat
  • Ostatnio:około 4 godziny
  • Postów:1029
0

Ogólnie w tym przypadku bardzo dobrze sprawdzi się Pascal Analyzer. Jest płatny, ale możliwe jest jego przetestowanie.
W praniu wyjdzie Ci, że w Twoim projekcie jest nie tylko martwy kod, ale i nie zoptymalizowany.

Poza tym chyba w Delphi XE i XE2 już nie jest to problemem (kasowany jest też kod podłączony pod usuwane elementy).

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)