2010-11-05 14 views
6

Czasami, gdy debuguję krok po kroku, tuż przed zdarzeniem FormCreate lub zaraz po FromDestroy, debugger zaczyna otwierać jednostki DevExpress (cxContainer.pas, ...) i tak przed FormCreate moje "F8" prowadzi mnie do cxContainer zamiast przechodzić do następnej linii mojego kodu.Delphi: jak wykluczyć jednostki z debuggera?

(to tylko przykład, może się zdarzyć, oczywiście z każdym 3rd biblioteki strona)

Jak mogę powiedzieć debugera „debugowania tylko moje jednostki” (tylko pas pliki wymienione w pliku DPR?)

Oczywiście czasami warto debugować biblioteki, ale w większości przypadków tak nie jest.

+1

Zobacz także [Jak pominąć sekcje kodu podczas debugowania?] (Http://stackoverflow.com/questions/449159/in-delphi-how-to-skip-sections-of-code-while-debugging) –

Odpowiedz

25

Lepiej postępować konwencję VCL dla elementów zewnętrznych:

  • ścieżkę wyjściową Zmień DCU we wszystkich opakowaniach zewnętrznych w innym folderze niż folderu przechowywania plików PAN.
  • Skompiluj każdy pakiet raz w trybie debugowania i zapisz wygenerowane pliki DCU w folderze (np. Debugujące jednostki DCU).
  • Skompiluj każdy pakiet jeszcze raz, ale tym razem w trybie zwolnienia i zapisz wygenerowane pliki DCU w folderze (np. Zwolnij DCU).
  • Przejdź do opcji Delphi i dodaj ścieżkę DCU do wersji "Ścieżka biblioteki".
  • W opcjach Delphi dodaj ścieżkę plików źródłowych do "Ścieżki przeglądania".
  • W opcjach Delphi dodaj ścieżkę debugujących modułów DCU do "Debuguj ścieżkę DCU".

W ten sposób Delphi będzie wyświetlać tylko wersje DCU tego komponentu zewnętrznego podczas kompilowania projektu, aby debugger nie mógł wkroczyć do kodu źródłowego. Z drugiej strony, ponieważ ścieżka źródłowa jest zawarta w "Ścieżce przeglądania", możesz nadal nawigować do kodu źródłowego wewnątrz IDE przez Ctrl + Kliknij nazwę jednostki lub cokolwiek zdefiniowanego w tych jednostkach.

Jeśli chcesz debugować komponent, możesz przejść do "Project | Options | Delphi Compiler | Compiling" i włączyć "Use debug .dcus". Zmusi to kompilator do użycia "ścieżki debugowania DCU" zamiast "ścieżki biblioteki".

VCL działa tak samo, generalnie nie wkraczasz do kodu źródłowego VCL podczas debugowania projektu, ale jeśli włączysz opcję "Użyj debugowania .dcus", możesz również debugować kod źródłowy VCL.

JVCL również w ten sam sposób organizuje pakiety i kod źródłowy.

EDIT: Jeśli podejmiesz takie podejście i chcesz mieć przeglądanie kodu (Ctrl + kliknięcie) działa; proszę wziąć pod uwagę, że podczas kompilowania wersji wersji pakietów, należy ustawić Informacje odniesienia symbolu w "Projekt | Opcje | Kompilator Delphi | Kompilacja" na "Informacje referencyjne"; w przeciwnym razie Ctrl + klik nie będzie działać dla tych jednostek. Domyślnie, opcja Release build configuration ustawia Symbol Reference Info na None.

+0

+1 Bardzo wyczerpująca odpowiedź. I nauczyłem się znanego triku. Widziałem ścieżkę dcu debugowania, ale nie "kliknięto", jak ją dobrze wykorzystać. Dziękuję za to. Tylko jedna wada, którą widzę: "użyj debug dcu" oznacza teraz, że będziesz używał debug dcu dla wszystkich swoich bibliotek, gdy często masz tylko jedną, którą chcesz debugować. W takim przypadku często łatwiej jest po prostu zmienić ścieżkę biblioteki tak, aby wskazywała na folder debugowania dcu dla tej samej biblioteki ... –

+0

Można się spodziewać, że programista używający Delphi przez ostatnie 10 lat to wie, ale ja dla jednego nie.

1

Wyłącz informacje o debugowaniu w jednostkach, w których nie ma działać debugger.

+0

Dodane, by ratować innych przed szukaniem tego, co właśnie zrobiłem: Można tego dokonać za pomocą dyrektywy {$ D-} kompilatora w jednostkach, których nie chcesz debugować. – RobertFrank

2

Istnieje tylko jeden sposób, aby powiedzieć kompilatorowi, aby nie debugował jednostki: skompiluj ją bez informacji o debugowaniu.

Jeśli masz źródło do swoich bibliotek, możesz odbudować ich pakiet po wyłączeniu opcji kompilacji "włącz debugowanie informacji" dla każdego pakietu w bibliotece. Jeśli masz szczęście, twoje biblioteki będą zawierały plik .inc, który określa opcje kompilatora, których potrzebują i które zawierają w każdej jednostce. W takim przypadku wszystko, co musisz zrobić, to edytować ten plik inc i przebudować wszystkie pakiety.

Jeśli nie masz źródła do swoich bibliotek, twórcy bibliotek mogli dostarczyć dwa zestawy dcu: jeden skompilowany z, drugi bez informacji debugowania. W takim przypadku wystarczy wskazać ścieżkę do biblioteki, która jest potrzebna.

2

Szybkie i proste rozwiązanie polega na wyłączeniu przełącznika DEBUG ({$ D-}) dla dowolnych bibliotek, z których korzystasz. Wiele bibliotek (w tym DevExpress) używa globalnego pliku włączającego, zwykle u góry każdego pliku źródłowego lub tuż nad lub poniżej instrukcji "jednostka" (np. Jednostka cxContainer, interfejs {$ I cxVer.inc}). Otwórz ten plik (kliknij na niego i naciśnij CTRL-Enter) i dodaj {$ D-} bezpośrednio u góry i skomentuj istniejące {$ D +}.

Powiązane problemy