Ograniczenia w debuggerze i inne sprawy

0

Dzien dobry,

Piszac rozne aplikacje, glownie na wlasne potrzeby trafilem kiedys na na takie nieprzyjemne ograniczenie: w edytorze Delphi mozna docelowo umiesci do 65536 linii kodu (wliczajac puste linie i komentarze).

Umieszczenie wiekszej ilosci kodu powoduje, ze nie dzialaja "breakpoints".

Spotkalem sie jeszcze z innymi usterkami dotyczacymi tych 65536 linii kodu zwiazanymi z ustawianiem parametrow, pokazywaniem bledow w linii o numerze modulo N (gdzie N = 65536) i inne) - ale mnie interesuje raczej ta pierwsza cecha - brak mozliwosci debbugowania i zwiazane z tym takze inne klopoty.

Na pewnym angielskim forum jakas osoba dzziwila sie, ze pisze sie tak "dlugasne" programy i zaproponowala podzial na "unity". Byly tez inne podobne rady.


Otoz najpierw maly komentarz: w dobie gigapamieciowych urzadzen (ramu, dyskow itp) - wydaje mi sie dziwne, ze nie moge pisac w sposob jaki mi odpowiada. Rozumiem, gdyby to bylo pare milionow linii kodu, ale 65 K?

Co ciekawe, 3/4 z mojego programu, ktory w tej chwili przekraca 70 K linii to komentarze.

Moje pytanie jest takie: jak mozna ten problem rozwiazac, bo katorga z podzialem tego ustrojstwa na mniejsze moduly nie usmiecha mi sie.

Tlumacze to jeszcze raz, dla osob, ktore chciabyby podzielic to na mniejsze unity: oczywiscie to w koncu jest wykonanle, ale nie wyobrazam sobie jak moglbym to zrobic w rozsadnym czasie.


Zrobilem nawet pare prob, ale jak napisalem to jest katorga, bo wszystkie procedury, formy, zmienne i tablice musza sie wzajemnie widziec, tak jakby byly w jednym unicie. A to nie takie proste, bo procedura A z unitu 1 moze wywolywac procedure B z unitu 2, ale takze oczywiscie odwrotnie.

Jesli np: wpisze sie w kazdym unicie deklaracje dolaczenia wszystkich innych unitow np (z wyjatkiem wlasnego oczywiscie) jak w unicie 2 (dodatkowo w unicie "global1" sa wszystkie zmienne globalne i tablice):

(to bedzie w unit1):

uses
unit2, unit3, global1

(to bedzie w unit2):

uses
unit1, unit3, global1

(to bedzie w unit3):

uses
unit1, unit2, global1

to kompilator informuje, ze tak nie wolno, bo nastapi cykliczne wywolywanie rekurencyjne "Circular unit reference" o ile dobrze pamietam.

Jesli zas zadeklaruje sie to zgodnie z wymaganiami kompilatora, to jest umiesci sie "includy" tylko w 1 unicie, w ktorym beda wywolania do 2 i 3, to kompilator z kolei informuje, ze w unicie 2 i 3 napotkal na nieznane/niezadeklarowane procedury z unita 1.


Prosze wiec o rade jak to rozwiazac - jak mozna cieszyc sie edycja kodu ponad 65536 linii bez zdanych dziwnych ograniczen ze strony debuggera/breakpoints.

I/LUB

Jak mozna uwspolnic wszystkie procedury i inne sprawy, tak aby byly widoczne z kazdego unita bez ograniczen - innymi slowy aby powiedzmy 3 czy 10 unitow zachowywalo sie jak 1 ale z wygoda przelaczania pomiedzy fragmentami kodow/debuggowania zawartymi w kilku unitach.

Jestem juz zmeczony tygodniowym przeszukiwaniem internetu w poszukiwaniu tak oczywistych spraw. Pewnie gdzies one sobie (te informacje) siedza zaszyte w jakiejsc bazie wiedzy, tylko szkopul w tym, ze trzeba wiedziec gdzie.

Tak zreszta jest chyba ze wszystkim.

Mam nadzieje, ze podane tu rady przydadza sie takze innym uzytkownikom.

Pozdrawiam,
jkoala
[email protected]

p.s.
Jesli ktos chce moze tez pisac na email, ale prosze raczej uwagi zamiescic na tym forum, poniewaz ostatnio onet dziala, tak, ze poczta pojawia sie z kilkudniowym opoznieniem, albo w ogole nie przychodzi.

0

Hm, skoro trafiłęś na takie ograniczenie to pewnie jest ono mocno związane z środowiskiem programistycznym i nie wydaje mi się by w łatwy sposób się go pozbyć.

Co do podziału na kilka modułów: umieszczanie wszystkich modułów w sekcji uses zaraz po słowie kluczowym interface powoduje błąd cyklicznej referencji od modułów - dlatego pewne moduły powinieneś umiescićw sekscji uses w bloku implementacji czyli po słowie kluczowym implementation.

Innym rozwiązanie może być rozbicei kodu na pliki do inkludowania na podobieństwo metodologii z c wtedy używasz dyrektywy kompilatora do dołączenia tego pliku do całości - aczkolwiek nie mam pojęcia jak zareaguje na to Delphi.

Pozdrawiam i życzę szczęścia w rozwiązaniu problemu :)

0

Ten blad dotyczy o ile si enie myle Delphi 7 i starszych. Jedynym wyjsciem wydaje sie byc zakupienie nowszej wersji. Choc wiem, ze nie jest to zapewne rozwiazanie ktore Cie cieszy ;)

0

Mam Delphi7 Personal. Spokojnie debbuger działa na 120.000 linijkach.

0

a może po prostu z kopii kodu usunąć komentarze i go zdebugować ? po wykryciu błędów możesz je naprawić w pliku z komentarzami. przecież 1/4 z tego kodu to mniej niż 65536.

1 użytkowników online, w tym zalogowanych: 0, gości: 1